DataTable.GetChanges() verändert Feld-Inhalte ?!

24/06/2009 - 15:19 von Daniel Boss | Report spam
Guten Tag

Zur Zeit stehe ich màchtig auf dem Schlauch bei einer Abfrage.

Grundsàtzlich geht es um eine DataTable, welche in einem DataGridView
angezeigt wird.
In dieser Tabelle hat es unter anderem 2 Felder vom Typ Boolean (Auf dem
SQL-Server -> Bit).
Diese beiden Felder werden auch im DataGridView dargestellt und zwar mittels
DataGridViewCheckBoxColumn.

Wenn ich nun im Grid eine neue Zeile hinzufüge, dann werde alle Werte der
Zeile initalisiert. Sprich ich schriebe in die DataTable meine Defaultwerte
rein. Bei den beiden Booleans ist das 2 mal "False".

Die Anzeige am Bildschirm ist korrekt. So, nun klicke ich eine CheckBox an,
damit diese den Hacken aktiv hat. Danach verlasse ich noch sicherheitshalber
das Grid, sprich der Focus liegt irgendwo in einer TextBox.

So, nun möchte ich diese Zeile abspeichern.

In meiner Save-Routine steht dann folgender Code:
//DataTable oPCBalances
//Es befindet sich zu dem Zeitpunkt nur ein Record in der Tabelle!

if (oPCBalances.GetChanges() != null)
{
DataTable oChanges = oPCBalances.GetChanges();

mach irgendwas damit

}

(Daten von oPCBalances)
http://img196.imageshack.us/i/bild5d.jpg/

Wenn ich den RowState von oPCBalances abrufe, dann steht dieser auf
"Modified", was auch korrekt ist.
Die beiden Boolean-Felder sehen dann so aus:
feld_plus feld_minus
True False


Bis dahin ist alles normal. Wenn ich nun aber die DataTable oChanges
anschaue,
steht darin dass der RowState = "Added" ist, und beide Boolean haben den
Wert False. Also genau den Zustand als er in die DataTable eingefügt worden
ist.

(Daten von oChanges)
http://img196.imageshack.us/i/bild4h.jpg/

Ich habe dieses Prinzip der Datenànderungen an sehr vielen Orten schon
gebraucht und hatte nirgends Probleme. Aber hier mit diesen beiden Booleans
scheint etwas nicht ganz zu stimmen.

Hat jemand eine Idee wieso die GetChanges() andere Werte zurückgibt als in
der dazugehörigen Tabelle drin steht?

Es wurde weder ein anderer Record hinzugefügt, noch gelöscht. Es wird einzig
und aleine EIN Record hinzugefügt in die Tabelle und danach mittels Checkbox
den Wert auf True gesetzt.

Bin echt grad etwas mit vielen Fragezeichen umhüllt -.-
Hat jemand ne Idee?

Wàre Toll!

Liebe Grüsse
Dani
 

Lesen sie die antworten

#1 Frank Dzaebel
25/06/2009 - 08:28 | Warnen spam
Hallo Daniel,

Ich habe dieses Prinzip der Datenànderungen an sehr vielen Orten schon
gebraucht und hatte nirgends Probleme. Aber hier mit diesen beiden
Booleans scheint etwas nicht ganz zu stimmen.



Du solltest sauberer immer folgendes Prinzip anwenden,
sonst hast Du ggf. mit Zwischen-Zustànden, bei denen das
Binding noch nicht beendet ist, zu tun:

private void saveButton_Click(object sender, EventArgs e)
{
this.Validate();
this.deinBindingSource.EndEdit();
if (deinDataTable.GetChanges() != null)
{
DataTable changes = deinDataTable.GetChanges();
// .. weitere Dinge
}
}

bzw. einfacher die Update-Methode des TableAdapters
nutzen, falls vorhanden, die das automatisch macht:

private void saveButton_Click(object sender, EventArgs e)
{
this.Validate();
this.deinBindingSource.EndEdit();

this.tableAdapterManager.UpdateAll(this.deinDataSet);
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen