2012-09-27 38 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回覆我也會試試這個... –