我有一个带有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是最新的。
membres表是一个访问表
我正在以visual 2010调试模式运行应用程序。
答案 0 :(得分:3)
通常的做法是重置DataSource
的{{1}}。
尝试使用此代码(使用正确的代码从数据集中提供正确的表):
DataGridView
调用dataGridView1.DataSource = typeof(List);
dataGridView1.DataSource = dataset.Tables["your table"];
不起作用,因为它只强制重绘,但绘制网格的代码不知道更改。
答案 1 :(得分:3)
我在搜索完全相同的问题时偶然发现了这一点。虽然没有在网上找到它。 这对我有用:
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
首先清除数据表中的所有数据,然后使用数据适配器中的数据重新填充它,因为您说数据库已使用您的代码更新,只是它没有刷新。
答案 2 :(得分:1)
您也可以使用:
DirectCast(dataGridView1.DataSource, DataTable).AcceptChanges()
只需替换dataGridView1
即可。第二个参数是DataTable
类。
答案 3 :(得分:0)
......还有一个对我有用的选择:
'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
答案 4 :(得分:0)
我刚刚添加了这一行:
Me.EmpTableAdapter.Fill(Me.MyDbDataSet1.Emp)