DataTable.GetChanges() verändert Feld-Inhalte

Athor

Mitglied
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
....
}

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


http://img196.imageshack.us/i/bild4h.jpg/

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.

Ich habe diese 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 andere 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

P.S.
Habe den Teil mit dem Grid und der Steuerung mal in eine kleinere App reingebaut und dort geht alles wunderbar. Aber weder die Grid-Steuerung noch die Datensteuerung im eigentlichen Projekt ist anders. Es wird nichts anderes gemacht an den Daten und trotzdem passiert der Fehler.
 
Habs damit gelöst dass ich folgende Funktion vorgängig aufrufe.
Damit wird wohl dann zu 100% die Validation des Grids ausgelöst und die Daten übernommen.

protected void GridEndEdit(DataGridView oGridView)
{
if (oGridView == null)
return;

DataGridViewCell currentCell = oGridView.CurrentCell;
oGridView.CurrentCell = null;
oGridView.CurrentCell = currentCell;
}
 
Moin :)

Vielleicht hilft das CurrentCellDirtyStateChanged-Ereignis des DGV in Zusammarbeit mit dem CellValueChanged-Ereignis -> Bitte schau in die SDK-/MSDN-Doku Beispiel

Gruß Rainer
 

Neue Beiträge

Zurück