【问题标题】:how to display a String depending on DateDiff value in asp.net Gridview?如何根据 asp.net Gridview 中的 DateDiff 值显示字符串?
【发布时间】:2012-09-19 00:36:19
【问题描述】:

我有一个查询要显示任务完成日期和任务截止日期的DATEDIFF。我想显示任务是否按时完成,并根据日期差异的值将结果显示为“按时完成”和“未按时完成”。

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

这里我得到value >= 0如果及时完成,

现在得到这个值,我想将文本绑定到网格为“及时完成”或“未及时完成”。

在网格视图中:

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

怎么做?

【问题讨论】:

    标签: asp.net sql datetime gridview datediff


    【解决方案1】:
    select memname, 
        (case when  DATEDIFF(d,CompleteDate,FreeTrialTaskMst.Enddate) >0 then 'completed'
    else 'Not Complete' end) as  DeadLine
      from member
    

    【讨论】:

    • 非常感谢@vikram,这对我很有帮助。
    【解决方案2】:

    可能最简单和最易读的方法是使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多