如何根据asp.net Gridview中的DateDiff值显示字符串?

时间:2012-09-27 09:03:55

标签: asp.net sql datetime gridview datediff

我有一个查询显示任务已完成日期的DATEDIFF和任务DeadLine。我想显示任务是否及时完成,并根据日期差异的值显示结果为“时间已完成”和“未完成时间”。

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>

怎么做?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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