Verständnisfrage zu DataTable.GetChanges()

18/11/2008 - 10:28 von Michael Böckinghoff | Report spam
Hallo NG,

ich nutze zur Zeit die GetChanges() Methode um
herauszufinden ob der User Änderungen an einem
DataTable über ein DataGrid vorgenommen hat.

Wechselt der User die Ansicht (den SQLString) soll er gefragt werden
ob die letzten ànderugnen vorher noch gespeichert werden sollen.

Soweit so gut, jetzt hab ich allerdings ein kleines Problem:

Ändert der User zb in der Spalte "Sende_Werte" eine Wert und àndert ihn
anschießend aber wieder ins orginal zurück, bekomm ich trotzdem diese Row
als
geàndert gemeldet.

Um das zu umgehen lade ich zur zeit nochmal den entsprechenden Inhalt aus
der Datenbank
und vergleiche die Rows Column für Column ob tasàchlich ànderungen zu dem
stand in der DB
vorhanden sind.

Gibt es für dieses Zenaria villeicht eine elegantere herangehensweise,
villeicht mit LINQ?

TIA

Gruß

Michael

Hier der Code der Methode mit der ich den Unterschied festelle
wahrscheinlich hàsslich umgebrochen:
#############################################################################

public bool HasDataTableChanges()
{

if (_dtAktuellTable == null)
{

return false;

}

BindingContext[_dtAktuellTable].EndCurrentEdit(); //complete
any editing the user is currently doing

DataTable changesDataTable = _dtAktuellTable.GetChanges();


// dataTable Abrufen und Editirte DataRows mit Inhalt in der
// DatenBank vergleichen. ist nur eine Row unterschiedlich dann
// return true ansonsten am ende return false!
if(changesDataTable != null){
try
{
DataTable dtAktuellInDb = new DataTable();
_dataAdapter.Fill(dtAktuellInDb);

foreach (DataRow xRow in changesDataTable.Rows)
{
// Suche diese Row in dem dtAktuellInDb und
vergleiche anschließende alle columns
string strExpr = string.Format("[ID] = '{0}'",
xRow["ID"]);
DataRow[] searchedRows =
dtAktuellInDb.Select(strExpr);
//jetzt in der ersten row alle columns vergleichen
for (int i = 0; i <
searchedRows[0].ItemArray.Length; i++)
{
if (xRow[i].ToString() !=
searchedRows[0][i].ToString())
{
// unterschied wurde gefunden also true
return true;
}
}
}
}
catch
{
// Lieber einmal zuviel speichern als
// einmal zuwenig!
return true;
}
}
return false;
}
 

Lesen sie die antworten

#1 Peter Fleischer
18/11/2008 - 16:25 | Warnen spam
"Michael Böckinghoff" schrieb im Newsbeitrag
news:

Um das zu umgehen lade ich zur zeit nochmal den entsprechenden Inhalt aus
der Datenbank
und vergleiche die Rows Column für Column ob tasàchlich ànderungen zu dem
stand in der DB
vorhanden sind.



Hi Michael,
einfacher ist es bestimmt, wenn Originalwert mit aktuellem Wert verglichen
wird. Dazu ist aber auch kein aufwendiges GetChanges erforderlich. Ein
Select mit entsprechendem RowState reicht da schon.

Viele Grüsse
Peter

Ähnliche fragen