0

我有一个显示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>

怎么做?

4

2 回答 2

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值从DATEDIFFto 转换为nvarchar

于 2012-09-27T09:12:13.810 回答
0
select memname, 
    (case when  DATEDIFF(d,CompleteDate,FreeTrialTaskMst.Enddate) >0 then 'completed'
else 'Not Complete' end) as  DeadLine
  from member
于 2012-09-27T09:23:09.470 回答