【问题标题】:DataGridView does not refresh after dataset update vb.net数据集更新vb.net后DataGridView不刷新
【发布时间】:2012-04-25 09:52:12
【问题描述】:

我有一个带有 dataGridView 的 vb.net 表单

dataGridView 数据源是带有这条sql语句的dgvTableAdapter

SELECT membres.ID, membres.refere_par, bands.titre, 
       membres_1.prenom & ' ' & membres_1.nom  AS reference_nom
FROM ((bands INNER JOIN membres ON bands.ID = membres.[band]) 
      INNER JOIN membres membres_1 ON membres.refere_par = membres_1.ID)

我像这样从成员表中删除成员

' Get member id 
Dim userId As Integer 
userId = DataGridView1.Item( 0,0).Value

' Delete the member
Me.MeoshowDataSet2.membres.FindByID(userId).Delete()
Me.MembresTableAdapter.Update(Me.MeoshowDataSet2)

' Refresh datagrid
dataGridView1.Refresh() ' does nothing

我知道删除语句有效,因为我看到了数据库中的更改。如果我关闭表单并重新打开它,dataGridView 是最新的。

成员表是访问表

我正在 Visual 2010 调试模式下运行应用程序。

【问题讨论】:

    标签: vb.net datagridview dataset tableadapter


    【解决方案1】:

    执行此操作的通常方法是重置DataGridViewDataSource

    试试这个代码(使用正确的代码从数据集中提供正确的表):

    dataGridView1.DataSource = typeof(List); 
    dataGridView1.DataSource = dataset.Tables["your table"];
    

    调用.Refresh() 不起作用,因为它只会强制重新绘制,但绘制网格的代码不知道更改。

    【讨论】:

    • 我没有使用 dataGridView1.DataSource = typeof(List);但是重新分配数据集确实有效。谢谢!
    • 我认为你需要 - 这是解决问题的部分!本质上,您需要清空数据源 - 您可以将数据源设置为 null,但使用 typeof(List) 将维护自动生成的列。但是,如果没有它也能正常工作,那就太好了:)
    • 我使用 dataGridView1.Datasouce = Nothing
    • 啊 - 是的,大致相同(忘了你是在 vb.net 工作的)。
    • 难道不能用 BindingSource 来通知 DGV DataTable 的变化吗?
    【解决方案2】:

    我在寻找完全相同的问题时偶然发现了这一点。不过网上没找到。 这对我有用:

    Public Sub RefreshData()
        dTable.Clear()
        dAdapter.Fill(dTable)
        dtaDataGrid.DataSource = dTable
    End Sub
    
    Private Sub btnRefresh_Click(sender As System.Object, e As System.EventArgs) Handles btnRefresh.Click
        RefreshData()
    
        ClearAllTextBox(Me)
    End Sub
    

    首先清除数据表中的所有数据,然后用数据适配器中的数据重新填充它,因为您说数据库已使用您的代码进行了更新,只是它没有刷新。

    【讨论】:

    • 谢谢,它也对我有用。将数据源重置为空只会扰乱我的 Datagrid,因为我为每一列设置了 DataPropertyName。你的建议很完美!
    【解决方案3】:

    你也可以这样用:

    DirectCast(dataGridView1.DataSource, DataTable).AcceptChanges()
    

    只需替换dataGridView1。第二个参数是DataTable 类。

    【讨论】:

      【解决方案4】:

      ...以及对我有用的替代方法:

      'reset datasource
      
      dgvBHL.DataSource = nothing
      
      ' Assign datatable to dgv this always works 1st time it is called
      
      dgvBHL.DataSource = dtData 
      
      'To fix the DGV not refreshing properly after the 1st time, switch the sort order
      
      dgvBHL.Sort(dgvBHL.Columns(0), System.ComponentModel.ListSortDirection.Descending)
      
      dgvBHL.Sort(dgvBHL.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
      
      'No need to do a refresh or anything else
      

      【讨论】:

        【解决方案5】:

        我刚刚添加了这一行:

            Me.EmpTableAdapter.Fill(Me.MyDbDataSet1.Emp)
        

        【讨论】:

          猜你喜欢
          • 2013-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-13
          • 1970-01-01
          • 2012-10-25
          • 2010-09-20
          相关资源
          最近更新 更多