Vb.net 刷新数据网格视图

Vb.net 刷新数据网格视图,vb.net,ms-access,datagridview,Vb.net,Ms Access,Datagridview,这看起来很容易解决,但我想不出来。我试图在子窗体(NewTournament)上设置按钮单击事件,将记录添加到数据库,然后通知数据网格,该数据网格自动列出来自同一数据库的记录(该网格在HomeForm上列出) 因此,我能够更新数据库并调用一个新窗口。但我无法让它刷新数据网格。我知道我应该清除数据网格,进行更改,然后重新填充网格。但每次我这么做,代码都不会更新。此外,我很清楚地看到,这项记录正在增加 Private Sub CreateTournament_Click(sender As Syst

这看起来很容易解决,但我想不出来。我试图在子窗体(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的数据源中。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语句< /P> > P>使用参数化查询。这是我的答案。希望您喜欢。在我的项目中,我有一个交换机,其中包含我的数据的数据网格视图。在它之前,当用户使用查询时,它只会自己刷新它,并且它会自己刷新它。我教过它如何做的不同。所以我使用了这种技术,定时器刷新效果。它是如何工作的我放置了一个计时器,在计时器中我从表单加载中复制并粘贴了这个代码

Me.ADDRESS\u ticketadapter.Fill(Me.Database1DataSet.ADDRESS\u TICKET)


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

当你说参数化查询时,你是什么意思?你不是把值串接在一起,而是把
作为占位符,然后设置参数值。这修复了一些问题,比如你的比赛名称是“奥布莱恩杯”,同时也消除了潜在的攻击。这是一份访问权限。很抱歉,我找不到任何可访问的VB.NET,但它实际上没有那么大的不同。当我使用您提供的代码时,我收到一个错误:“重载解析失败,因为没有可访问的“AddTournamentsRow”接受此数量的参数。编辑:我刚刚回答了我自己的问题。显然MasterDataSet的查询中没有所有这些参数。(仍然是新手)我必须使用计时器吗?这取决于你想完成什么。我用一个定时器在定时器中输入代码,然后我选择要刷新多少秒、分钟或小时,这样我的同事就可以看到新的数据