刷新数据网格视图

时间:2012-02-23 18:22:43

标签: vb.net ms-access datagridview

这看起来很容易解决,但我无法解决这个问题。我尝试在子窗体(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

2 个答案:

答案 0 :(得分:1)

最好的方法是将记录添加到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) )

另外,您可能需要考虑对Insert语句使用参数化查询

答案 1 :(得分:0)

这是我的答案,我希望你喜欢它。在我的项目中,我有一个交换机,在该交换机中,它包含我的数据的数据网格视图。之前,只有当用户使用查询时才会刷新它,它会自动刷新它。我教它如何做到与众不同。所以我用这种技术定时器刷新效果。它如何工作我把一个计时器和计时器我从表单加载复制并粘贴此代码。

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

在计时器的设置中,我打开它,每9秒重新加载一次数据你可以改变它,如果你愿意,它每1秒重新加载一次取决于它有多少记录。我希望这个答案可以帮助你无论如何。它适合我。