none
Gridview 上日期的比較? RRS feed

  • 問題

  • 各位前輩,

    如果在Gridview上有兩個日期,直接用下面的方式比較,會將內容當成字串來比較, 認為是 前者較大

    If e.Row.Cells(6).Text > e.Row.Cells(15).Text Then ....
    12/23/09                   01/05/10

    請問要如何轉換成日期呢?
    2009年12月23日 上午 09:06

解答

  • If DateTime.ParseExact(e.Row.Cells(6).Text, "mm/dd/yy", Nothing) > DateTime.ParseExact(e.Row.Cells(15).Text, "mm/dd/yy", Nothing) Then ....

    好一陣子沒寫 VB,不知對不對。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    除非不能打中文,否則請尊重當地語系的網友,使用中文發問或回答,這是一種基本禮貌。
    • 已標示為解答 Lolota Lee 2009年12月28日 上午 05:54
    2009年12月24日 上午 06:08
    版主

所有回覆

  • 我都用Convert.ToDateTime
    不過你的日期有問題

    01/05/10

    這個到底是幾月幾號??

     月/日/年,還是年/月/日??

    2009年12月23日 上午 09:15
    版主
  • 同阿尼大所說,

    您的日期格式可能要先轉換一下,
    可以參考一下,DateTime.ParseExact Method (String, String, IFormatProvider):http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

    看有沒幫助...
    In 91 :http://www.dotblogs.com.tw/hatelove/Default.aspx
    2009年12月23日 上午 09:32
    版主
  • 阿尼大大:

    我的格式是 月/日/年。

    2009年12月24日 上午 06:02
  • If DateTime.ParseExact(e.Row.Cells(6).Text, "mm/dd/yy", Nothing) > DateTime.ParseExact(e.Row.Cells(15).Text, "mm/dd/yy", Nothing) Then ....

    好一陣子沒寫 VB,不知對不對。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    除非不能打中文,否則請尊重當地語系的網友,使用中文發問或回答,這是一種基本禮貌。
    • 已標示為解答 Lolota Lee 2009年12月28日 上午 05:54
    2009年12月24日 上午 06:08
    版主
  • 小朱大大:

    執行的時候,出現下列錯誤!

    字串未被辨認為有效的 DateTime。

    我在資料庫裡定義的資料類型是DateTime, 讀到GridView後卻是字串。有辦法維持是Datetime嗎?
    2009年12月24日 上午 06:30
  • 你是把Cell.Text抓出來做比對,當然會是字串型態
    先把程式碼貼上來看看
    2009年12月24日 上午 06:48
    版主
  • 對了, 為什麼不從資料來源比較, 而要使用GridView上的內容比較 ?

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年12月24日 上午 06:54
  • 小朱大大:

    執行的時候,出現下列錯誤!

    字串未被辨認為有效的 DateTime。

    我在資料庫裡定義的資料類型是DateTime, 讀到GridView後卻是字串。有辦法維持是Datetime嗎?

    你要自己去判斷裡面是否有空值違反格式的值 ...
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    除非不能打中文,否則請尊重當地語系的網友,使用中文發問或回答,這是一種基本禮貌。
    2009年12月24日 上午 07:21
    版主
  • 阿尼大大:

    我的程式碼如下,

        Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
            Dim sqlds As New System.Web.UI.WebControls.SqlDataSource
            Dim myrow As GridViewRow
           
            sqlds.ConnectionString = "Server=Tpen02;database=Production;User ID=sa;Password="
            sqlds.SelectCommand = "SELECT 開單日期, 修正日期, 修正日期2, 修正日期3 FROM qc_mstr WHERE 工單號碼=@工單號碼"
            sqlds.SelectParameters.Add("工單號碼", e.Row.Cells(1).Text)
           
            Dim dv As Data.DataView = sqlds.Select(New DataSourceSelectArguments)
            GridView2.DataSource = dv
            GridView2.DataBind()
           
            If GridView2.Rows.Count > 0 Then
                myrow = GridView2.Rows(0)
                GridView2.Visible = True
                e.Row.Cells(17).Text = FormatDateTime(myrow.Cells(0).Text, DateFormat.ShortDate)
                If myrow.Cells(1).Text <> "&nbsp;" Then
                    e.Row.Cells(18).Text = FormatDateTime(myrow.Cells(1).Text, DateFormat.ShortDate)
                End If
                If myrow.Cells(2).Text <> "&nbsp;" Then
                    e.Row.Cells(19).Text = FormatDateTime(myrow.Cells(2).Text, DateFormat.ShortDate)
                End If
                If myrow.Cells(3).Text <> "&nbsp;" Then
                    e.Row.Cells(20).Text = FormatDateTime(myrow.Cells(3).Text, DateFormat.ShortDate)
                End If
            End If
           
            If e.Row.Cells(6).Text <> "" And e.Row.Cells(8).Text = "準時" And (e.Row.Cells(6).Text > e.Row.Cells(15).Text) Then
                'Response.Write(e.Row.Cells(6).Text)
                e.Row.Cells(8).Text = "延誤"
                sqlds.UpdateCommand = "UPDATE prod_det SET 押出完成=@押出進度 WHERE 工單號碼=@工單號碼"
                sqlds.UpdateParameters.Add("押出進度", "延誤")
                sqlds.UpdateParameters.Add("工單號碼", e.Row.Cells(1).Text)
                sqlds.Update()
                sqlds.UpdateParameters.Clear()
            End If
            If e.Row.Cells(9).Text <> "" And e.Row.Cells(11).Text = "準時" And (e.Row.Cells(9).Text > e.Row.Cells(15).Text) Then
                'Response.Write(e.Row.Cells(6).Text)
                e.Row.Cells(11).Text = "延誤"
                sqlds.UpdateCommand = "UPDATE prod_det SET 粉碎完成=@粉碎進度 WHERE 工單號碼=@工單號碼"
                sqlds.UpdateParameters.Add("粉碎進度", "延誤")
                sqlds.UpdateParameters.Add("工單號碼", e.Row.Cells(1).Text)
                sqlds.Update()
                sqlds.UpdateParameters.Clear()
            End If
            If e.Row.Cells(12).Text <> "" And e.Row.Cells(14).Text = "準時" And (e.Row.Cells(12).Text > e.Row.Cells(15).Text) Then
                'Response.Write(e.Row.Cells(6).Text)
                e.Row.Cells(14).Text = "延誤"
                sqlds.UpdateCommand = "UPDATE prod_det SET 攪拌完成=@攪拌進度 WHERE 工單號碼=@工單號碼"
                sqlds.UpdateParameters.Add("攪拌進度", "延誤")
                sqlds.UpdateParameters.Add("工單號碼", e.Row.Cells(1).Text)
                sqlds.Update()
                sqlds.UpdateParameters.Clear()
            End If
            'Response.Write(e.Row.Cells(1).Text & "+" & e.Row.Cells(9).Text & "-" & e.Row.Cells(12).Text & "+" & e.Row.Cells(15).Text & "<br />")
            'Response.Write(e.Row.Cells(9).Text.Length & "<br />")
            If e.Row.RowType = DataControlRowType.DataRow And e.Row.Cells(9).Text.Length = 8 Then
                'Response.Write("aaa<br />")
                e.Row.Cells(16).Text = e.Row.Cells(11).Text
            End If
            If e.Row.RowType = DataControlRowType.DataRow And e.Row.Cells(12).Text.Length = 8 Then
                'Response.Write("ccc<br />")
                e.Row.Cells(16).Text = e.Row.Cells(14).Text
            End If
            sqlds.UpdateCommand = "UPDATE prod_mstr SET 生產進度=@生產進度 WHERE 通知單號=@通知單號"
            sqlds.UpdateParameters.Add("生產進度", e.Row.Cells(16).Text)
            sqlds.UpdateParameters.Add("通知單號", e.Row.Cells(0).Text)
            sqlds.Update()
    End Sub
    2009年12月24日 上午 07:58
  • If GridView2.Rows.Count > 0 Then
                myrow = GridView2.Rows(0)
                GridView2.Visible = True
                e.Row.Cells(17).Text = FormatDateTime(myrow.Cells(0).Text, DateFormat.ShortDate)
                If myrow.Cells(1).Text <> "&nbsp;" Then
                    e.Row.Cells(18).Text = FormatDateTime(myrow.Cells(1).Text, DateFormat.ShortDate)
                End If
                If myrow.Cells(2).Text <> "&nbsp;" Then
                    e.Row.Cells(19).Text = FormatDateTime(myrow.Cells(2).Text, DateFormat.ShortDate)
                End If
                If myrow.Cells(3).Text <> "&nbsp;" Then
                    e.Row.Cells(20).Text = FormatDateTime(myrow.Cells(3).Text, DateFormat.ShortDate)
                End If
            End If
    這一段用 If e.Row.RowType = DataControlRowType.DataRow then 包起來


    順便問一下,為什麼要在RowDataBound裡面去做update?

    2009年12月24日 上午 09:05
    版主
  • To 原發問者:

    我有跟阿尼大大相同的疑問...進一步說明:我看你的程式碼,似乎是要檢核各種工作進度是否延誤,
    如果用  GridView 呈現後,並不是要讓使用者手動檢核(或做其他動作),那何不在資料庫端完成就
    好呢?

    這樣你也不必為日期格式轉來轉去而困擾...
    2009年12月24日 上午 09:33
  • 小朱大大:

    感謝! 的確可以解決我的問題。

    2009年12月25日 上午 02:34
  • hunterpo0323 你好:

    你的建議不錯! 如果這幾個日期會變動的話,如何確保不會遺漏更新?
    在資料庫端更新的時機為何? 在 Page_Init 嗎?
    2009年12月25日 上午 02:41