2012-04-13 9 views
4

ich eine vb.net Form mit einem Datagridview habenDatagridview nicht aktualisiert, nachdem Daten-Set Update vb.net

Datagridview-Datenquelle die dgvTableAdapter mit dieser SQL-Anweisung ist

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) 

I membres aus dem löschen members Tabelle

' 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 

Ich weiß, dass die Löschanweisung funktioniert, weil ich die Änderungen in der Datenbank sah. Wenn ich das Formular schließe und es wieder öffne, ist das DataGridView auf dem neuesten Stand.

Die membres Tabelle ist eine Zugriffstabelle

ich die App in der visuellen 2010 Debug-Modus ausgeführt wird.

Antwort

3

Das übliche Verfahren ist das Zurücksetzen der DataSource der DataGridView.

Versuchen Sie, wie dieser Code (mit richtigem Code die richtige Tabelle aus dem Datensatz zur Verfügung zu stellen):

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

.Refresh() Aufruf funktioniert nicht, da es nur ein Neuzeichnen erzwingt, aber der Code, den das Gitter malt doesn Ich kenne die Änderungen nicht.

+0

Ich benutze dataGridView1.DataSource = typeof (List) nicht; aber die Neuzuweisung des Datensatzes hat funktioniert. Vielen Dank! – pec

+0

Ich denke, du musst - das ist der Teil, der das Problem behebt! Im Wesentlichen müssen Sie die Datenquelle leeren - Sie können die Datenquelle auf null setzen, aber mit typeof (Liste) werden die automatisch generierten Spalten beibehalten. Aber wenn es ohne das klappt, toll :) –

+1

Ich habe dataGridView1.Datasouce = Nothing verwendet – pec

1

Sie können auch verwenden:

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

Nur dataGridView1 ersetzen. Der zweite Parameter ist die DataTable Klasse.

3

Ich stolperte darüber während der Suche nach exakt demselben Problem. Habe es aber online nicht gefunden. Hier ist, was für mich gearbeitet:

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 

in der Datentabelle alle Daten gelöscht zuerst nachgefüllt es dann mit den Daten aus dem Datenadapter, da Sie sagte, dass die Datenbank mit Ihrem Code aktualisiert wurde, nur, dass es didn‘ t aktualisieren.

+0

danke, es hat auch für mich funktioniert. Das Zurücksetzen der Datenquelle auf nichts bringt nur mein Datagrid durcheinander, weil ich DataPropertyName für jede Spalte festgelegt habe. Ihr Vorschlag funktioniert perfekt! – LuckyLuke82

0

... und eine Alternative, die für mich gearbeitet:

'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 
Verwandte Themen