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値を fromDATEDIFFにキャストするのnvarcharですか?

于 2012-09-27T09:12:13.810 に答える