我有一个查询显示任务已完成日期的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>
怎么做?
答案 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