2012-04-13 62 views
4

我有一個vb.net形式一個DataGridView後不刷新DataGridView的數據集更新vb.net

DataGridView的數據源是用這條SQL語句

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) 

我刪除了membres的dgvTableAdapter membres這樣的表

' 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 

我知道delete語句的工作原理,因爲我看到了數據庫中的更改。如果我關閉表單並重新打開它,那麼dataGridView是最新的。

的membres表是一個訪問表

我跑在視覺2010調試模式下的應用程序。

回答

3

這樣做的通常方法是重置DataGridViewDataSource

嘗試這樣的代碼(用正確的代碼,提供從數據集右表):

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

調用.Refresh()不起作用,因爲它只強制重繪,但油漆電網的代碼沒有按不知道變化。

+0

我沒有使用dataGridView1.DataSource = typeof運算(名單); 但重新分配數據集所做的工作。謝謝! – pec 2012-04-13 01:21:32

+0

我認爲你需要 - 這是解決問題的一部分!從本質上講,你需要清空數據源 - 你可以設置數據源爲空,但使用typeof(名單)將保持自動生成的列。但是,如果它確實沒有,那麼:) – 2012-04-13 01:22:45

+1

我用dataGridView1.Datasouce = Nothing – pec 2012-04-13 01:24:40

1

您也可以使用此:

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

只需更換dataGridView1。第二個參數是DataTable類。

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 

清除所有數據在數據表第一,然後從數據適配器的數據填充它,因爲你說的數據庫是你的代碼更新,只知道它沒」 t刷新。

+0

謝謝,它也適用於我。將datasource重置爲空只會加擾我的Datagrid,因爲我爲每列設置了DataPropertyName。你的建議很完美! – LuckyLuke82 2016-12-09 18:00:37

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