2012-09-27 37 views
0

我有一个查询显示DATEDIFF任务完成日期&任务DeadLine。我想显示任务是否及时完成,并根据日期差异的值显示结果为“完成时间”和“未完成时间”。如何根据asp.net Gridview中的DateDiff值显示字符串?

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

在这里,我得到value >= 0若不及时完成,< 0,如果没有时间内完成。

现在获取此值我想将文本绑定为“完成时间”或“未完成时间”。

以网格视图:

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

怎么办呢?

回答

0
select memname, 
    (case when DATEDIFF(d,CompleteDate,FreeTrialTaskMst.Enddate) >0 then 'completed' 
else 'Not Complete' end) as DeadLine 
    from member 
+0

非常感谢@vikram对我来说非常有帮助。 –

0

也许最简单和最可读的是使用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"; 
    } 
} 

,但我会建议做也每个SQL摆在首位(SELECT CASE WHEN ...)。

顺便说一句,为什么你把int的值从DATEDIFF改为nvarchar

+0

谢谢@Tim回复我也会试试这个... –