Update DB aus DataGridView

CKS04

Grünschnabel
Hallo,

habe eine Verbindung zu einer SQL-Server DB aufgebaut und lese eine Tabelle in ein Dataset (da = DataAdapter, ds = DataSet, dt = DataTable, bs = Binding Source)

daDataGridView.Fill(dsDataGridView)
dtDataGridView = dsDataGridView.Tables["TabellenName"]


mein DataGridView ist an den DataTable (dtDataGridView) gebunden. Die Tabellendaten werden auch alle korrekt im DataGridView angezeigt.

bsDataGridView.DataSource = dtDataGridView
dgvDataGridView.DataSource = bsDataGridView

Änderungen im DataGridView kann ich auch durchführen. Den letzendlichen Datenbankupdate habe ich über einen SpeicherButton einer MDI Form realisiert. Das DataGridView ist auf einer Childform.

Mein Problem besteht jetzt darin das der DataTable der zum Update genutzt wird die letzte Änderung nicht mitbekommt. Ändere ich z.B drei Zeilen des DataGridView und drücke dann Speichern dann enthält das Update Datatset nur zwei Zeilen.

mit diesen beiden Codezeilen mache ich den Update.

DataTable dtChanges = dtDataGridview.GetChanges()
daDataGridView.Update(dtChanges)

Wenn ich mir ansehe wieviele Zeilen dtChanges enthält dann ist es immer genau eine weniger als ich wirklich editiert habe. Anscheinend bekommt dtDataGridview die letzte Änderung nicht mit weil ich einen Klick auf einer anderen Form mache.
Seltsamerweise funktioniert es korrekt wenn ich als letzte Aktion eine Zeile lösche oder wenn ich nur eine Zeile lösche.

Ich habe jetzt alles durchgesucht weiß aber nicht wo mein wirkliches Problem liegt.

Kann mir einer weiterhelfen?

CK
 
Moin,

anstehende Änderungen (auch wenn es nur die letzte bearbeitete Zeile/Zelle ist) vor dem Speichern immer mit

BindingSource.EndEdit() abschliessen.

MSDN hat gesagt.:
Wenn die EndEdit-Methode aufgerufen wird, werden alle ausstehenden Änderungen auf die zugrunde liegende Datenquelle angewendet.

In Deinem Falle also
Code:
bsDataGridView.EndEdit();
DataTable dtChanges = dtDataGridview.GetChanges()
daDataGridView.Update(dtChanges)

Guggst Du auch mal hier für weitere Informationen:
http://msdn.microsoft.com/de-de/library/system.windows.forms.bindingsource.endedit(VS.80).aspx
 
Zurück