0

I have a query to display DATEDIFF of Task Completed date & Task DeadLine. I want to display whether the Task is completed in time or not and display result as "Completed in Time" and "Not Completed in Time" depending on the value of date difference.

select memname, 
      CONVERT(nvarchar, DATEDIFF(d,CompleteDate,FreeTrialTaskMst.Enddate)) AS Difference
  from member

Here I get value >= 0 if completed in time and <0 if not completed within time.

Now getting this value I want to bind the text to grid as "Completed in Time" or "Not Completed in Time".

In Grid View:

    <asp:TemplateField HeaderText=" DeadLine">
     <ItemTemplate>
     <asp:Label ID="lblDeadLine" runat="server" Text='<%# (Eval("DeadLine")) %>' ReadOnly="true"></asp:Label>
    </ItemTemplate>
   </asp:TemplateField>

How to do it?

Kara
  • 6,115
  • 16
  • 50
  • 57
SHEKHAR SHETE
  • 5,964
  • 15
  • 85
  • 143

2 Answers2

0

Probably the easiest and most readable is to use RowDataBound:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRow row = ((DataRowView)e.Row.DataItem).Row;
        Label lblDeadLine = (Label)e.Row.FindControl("lblDeadLine");
        int deadLine = int.Parse(row.Field<String>("DeadLine"));
        if(deadLine < 0)
            lblDeadLine.Text = "Not Completed in Time";
        else
            lblDeadLine.Text = "Completed in Time";
    }
}

But i would suggest to do it also per sql in the first place(SELECT CASE WHEN ...).

By the way, why do you cast the int value from DATEDIFF to nvarchar?

Tim Schmelter
  • 450,073
  • 74
  • 686
  • 939
0
select memname, 
    (case when  DATEDIFF(d,CompleteDate,FreeTrialTaskMst.Enddate) >0 then 'completed'
else 'Not Complete' end) as  DeadLine
  from member
Vikram Jain
  • 5,498
  • 1
  • 19
  • 31