簡體   English   中英

刷新數據網格視圖

[英]Refreshing a data grid view

這看起來很容易解決,但我無法弄清楚。 我試圖在子窗體(NewTournament)上進行按鈕單擊事件,將記錄添加到數據庫,然后通知數據網格,該數據網格自動列出來自同一數據庫的記錄(該網格在HomeForm上列出)。

我因此能夠更新數據庫並調用新窗口。 但是我無法用它刷新任何數據網格。 我知道我應該清除數據網格,進行更改,然后重新填充網格。 但是每次我這樣做時,代碼都不會更新。 此外,我可以很好地看到正在添加記錄。

Private Sub CreateTournament_Click(sender As System.Object, e As System.EventArgs) Handles CreateTournament.Click
    ' Check the form for errors, if none exist.
    ' Create the tournament in the database, add the values where needed. Close the form when done.

    Dim cn As OleDbConnection
    Dim cmd, cmd1 As OleDbCommand
    Dim icount As Integer
    Dim str, str1 As String

    Try
        cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Users\Paul Williams III\Documents\Visual Studio 2010\Projects\Everything OP Client\Everything OP Client\Master.mdb'")
        cn.Open()
        str = "insert into Tournaments (SanctioningID,TournamentName,TournamentVenue,TournamentDateTime,TournamentFirstTable,Game,Format,OrganizerID) values(" _
            & CInt(SanctioningIDTxt.Text) & ",'" & Trim(TournamentNameTxt.Text) & "','" & _
            "1" & "','" & EventDateTimePck.Value & "','" & TableFirstNumberNo.Value & "','" & GameList.SelectedIndex & "','" & FormatList.SelectedIndex & "','" & Convert.ToInt32(ToIDTxt.Text) & "')"

        'string stores the command and CInt is used to convert number to string
        cmd = New OleDbCommand(str, cn)
        str1 = "select @@Identity"
        icount = cmd.ExecuteNonQuery
        cmd1 = New OleDbCommand(str1, cn)
        Counter = CInt(cmd1.ExecuteScalar)
        MessageBox.Show(Counter & " was the last inserted id")
        'displays number of records inserted

        HomeForm.MasterDataSet.Clear()
        HomeForm.MasterDataSet.GetChanges()
        HomeForm.TournamentsTableAdapter.Fill(HomeForm.MasterDataSet.Tournaments)
        HomeForm.DataGridView1.Refresh()

    Catch ex As Exception
        MessageBox.Show(ex.ToString)
    End Try

    Me.Close()

    Dim n As New TournamentWindow
    n.TournID = Counter
    n.Show(HomeForm)

End Sub

最好的方法是將記錄添加到DataGrid的DataSource中。 DataGrid將自動更新。 在這種情況下,它可能像

HomeForm.MasterDataSet.Tournaments.AddTournamentsRow( CInt(SanctioningIDTxt.Text) , _
                           Trim(TournamentNameTxt.Text) ,  _
                           "1" , _
                           EventDateTimePck.Value, _
                           TableFirstNumberNo.Value,  _ 
                           GameList.SelectedIndex, _
                           FormatList.SelectedIndex, _
                           Convert.ToInt32(ToIDTxt.Text) )

順便說一句,您可能要考慮對插入語句使用參數化查詢

這是我的答案,希望您喜歡。 在我的項目中,我有一個總機,在該總機中包含我的數據的數據網格視圖。 在此之前,只有當用戶使用查詢時,它才會自我刷新,並且它將自我刷新。 我教過它如何做得與眾不同。 因此我使用了此技術的計時器刷新效果。 它是如何工作的,我放置了一個計時器,並在計時器中從表單加載中復制並粘貼了此代碼。

Me.ADDRESS_TICKETTableAdapter.Fill(Me.Database1DataSet.ADDRESS_TICKET)

在計時器的設置中,我將其打開,並且每9秒鍾重新加載一次數據,您可以更改它,如果您願意,它取決於輸入的記錄數,每1秒鍾重新加載一次。希望此答案對您有幫助。 它對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM