none
DataGridView的問題 RRS feed

  • 問題

  • 1.假設 DataGridView 具有 10 列(Row), 每列具有「報告日期」資料行(Column)。
    2.我設定一個 Button ,按下它之後會執行 For...Next 更新每列的「報告日期」。
    3.程式沒問題,每列的「報告日期」都有更新。

    問題出在第  Rows(0) 列的 「報告日期」資料行,其內容雖有更新,但它顯示的內容一直是更新前的舊值,這讓人看起來它好像沒更新資料,其實是有的。請問我該如何處理,才能讓 Rows(0) 列的 「報告日期」資料行能顯示出正確值。(只有 Rows(0) 列的 「報告日期」資料行才有這個狀況。)

    敬請指導,謝謝。
    chian
    2009年5月14日 上午 09:06

解答

  • 我試了一下,很正常
    Public Class Form2
        Private MyTable As New DataTable
        Private MyDataset As New DataSet
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            MyTable.Columns.Add("SEQ")
            MyTable.Columns.Add("ChkDate")
            Dim i As Integer
            For i = 0 To 9
                Dim myRow As DataRow = MyTable.NewRow
                myRow.Item(0) = i
                myRow.Item(1) = DateTimePicker1.Text
                MyTable.Rows.Add(myRow)
            Next
            MyDataset.Tables.Add(MyTable)
            DataGridView1.DataSource = MyDataset.Tables(0)
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If MsgBox("確定變更嗎?", MsgBoxStyle.OkCancel, "請確認") = MsgBoxResult.Ok Then
                Dim i As Integer
                For i = 0 To MyDataset.Tables(0).Rows.Count - 1
                    MyDataset.Tables(0).Rows(i).Item(1) = DateTimePicker1.Text
                Next
            End If
        End Sub
    End Class

    • 已標示為解答 Lolota Lee 2009年5月21日 上午 08:05
    2009年5月14日 下午 01:53
    版主

所有回覆

  • 你更新資料庫完有重新查詢嗎?


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年5月14日 上午 09:45
  • 1. 這跟資料庫無關,我僅是單純的更新 DataGridView 每列,其「報告日期」資料行(Column)的值。
    2. 更新 DataGridView 每列「報告日期」資料行的值後,僅第 0 列的「報告日期」仍顯示舊值,但只要使用滑鼠點一下該列任意儲存格,「報告日期」就會顯示出更新後的值。
    3.所以說,每列 DataGridView 「報告日期」資料行的值都有變更,為獨第 0 列的「報告日期」仍顯示舊值。

    謝謝囉。

    chian
    2009年5月14日 上午 11:08
  • chian:
        沒有程式碼,很難猜.一則不知你的DataGridView的DataSource是如何設定,二則不了解你是如何更新DataGridview.瞎猜可能又猜不到.
       
    2009年5月14日 上午 11:13
    版主
  • 1.感謝關心。
    2.程式碼很單純,如下:

    If MsgBox("確定變更嗎?", MsgBoxStyle.OkCancel, "請確認") = MsgBoxResult.Ok Then

       For I As Integer = 0 To Me.個人資料DataSet.個人資料.Count - 1
              Me.個人資料DataSet.個人資料.Rows(I).Item("檢查日期") = 變更檢查日期DateTimePicker.Text
       Next

    End If


    chian
    2009年5月14日 下午 12:32
  • 我試了一下,很正常
    Public Class Form2
        Private MyTable As New DataTable
        Private MyDataset As New DataSet
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            MyTable.Columns.Add("SEQ")
            MyTable.Columns.Add("ChkDate")
            Dim i As Integer
            For i = 0 To 9
                Dim myRow As DataRow = MyTable.NewRow
                myRow.Item(0) = i
                myRow.Item(1) = DateTimePicker1.Text
                MyTable.Rows.Add(myRow)
            Next
            MyDataset.Tables.Add(MyTable)
            DataGridView1.DataSource = MyDataset.Tables(0)
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If MsgBox("確定變更嗎?", MsgBoxStyle.OkCancel, "請確認") = MsgBoxResult.Ok Then
                Dim i As Integer
                For i = 0 To MyDataset.Tables(0).Rows.Count - 1
                    MyDataset.Tables(0).Rows(i).Item(1) = DateTimePicker1.Text
                Next
            End If
        End Sub
    End Class

    • 已標示為解答 Lolota Lee 2009年5月21日 上午 08:05
    2009年5月14日 下午 01:53
    版主
  • 1.感謝說明。我想這是系統問題吧。
    2.在儲存格的內容更新後,我將目前儲存格(CurrentCell)指定到「檢查日期」資料行,如此即可促使資料呈正確顯示。這雖能排除問題,但仍不知發生了什麼事。

    謝囉。
    chian
    2009年5月14日 下午 02:26