Eichhoernchen09
Grünschnabel
Hallo!
Ich habe folgendes Problem, bei dem ich dringend Hilfe suche:
Ich habe einen Dialog, der Daten aus einer Datenbank lädt und sie in einem DataGrid und verschiedenen Textfelder (über DataBinding) anzeigt. Nun kann man hier beliebig editieren, Einträge hinzufügen oder löschen (über Schaltflächen, nicht über das Grid, das ist schreibgeschützt). Das Problem ist nun, dass ich beim Löschen einer Zeile über den CurrentRowIndex gehe und das DataGrid mit den Indizes durcheinander kommt. Lösche ich zum Beispiel die vierte Zeile und danach die Fünfte, behauptet es, kommt ein Fehler, dass ich auf gelöschte Zeileninformationen zugreife. Wie kann ich über den Index des DataSets, das dem DataGrid zu Grunde liegt, löschen? Für Webanwendungen hab ich da im Forum die Eigenschaft DataSetIndex gesehen, aber ich arbeite hier mit WindowsForms und habe noch keine passende Eigenschaft gefunden.
Hier mein Quelltext:
BEIM LADEN DES DIALOGES:
KLICK AUF DIE SCHALTFLÄCHE ZUM LÖSCHEN:
Also, wie bekomme ich es hin, das er die richtigen Zeilen aus dem DataSet und DataGrid löscht und nicht mit den Indizes durcheinander kommt?
Vielen Dank schon mal im Voraus!
Ich habe folgendes Problem, bei dem ich dringend Hilfe suche:

Ich habe einen Dialog, der Daten aus einer Datenbank lädt und sie in einem DataGrid und verschiedenen Textfelder (über DataBinding) anzeigt. Nun kann man hier beliebig editieren, Einträge hinzufügen oder löschen (über Schaltflächen, nicht über das Grid, das ist schreibgeschützt). Das Problem ist nun, dass ich beim Löschen einer Zeile über den CurrentRowIndex gehe und das DataGrid mit den Indizes durcheinander kommt. Lösche ich zum Beispiel die vierte Zeile und danach die Fünfte, behauptet es, kommt ein Fehler, dass ich auf gelöschte Zeileninformationen zugreife. Wie kann ich über den Index des DataSets, das dem DataGrid zu Grunde liegt, löschen? Für Webanwendungen hab ich da im Forum die Eigenschaft DataSetIndex gesehen, aber ich arbeite hier mit WindowsForms und habe noch keine passende Eigenschaft gefunden.
Hier mein Quelltext:
BEIM LADEN DES DIALOGES:
Code:
m_data=ds; //globales DataSet bekommt DataSet aus Datenbank zugewiesen
m_view = m_data.Tables[0].DefaultView; //View erstellen
this.dataGrid.DataSource = m_view; //View als DataSource zuordnen
//Daten binden
this.idBox.DataBindings.Add(new Binding("Text",m_view,"ID"));
…
private void dataGrid_CurrentCellChanged(object sender, System.EventArgs e)
{
//hier ermittle ich die letzte ausgewählte Zeile, um sie später zu
//löschen oder zu kopieren (m_row ist global)
if(m_row!=null)
m_row.EndEdit();
//aktuelle Zeile
m_row = m_data.Tables[0].Select(m_filter)[grd.CurrentRowIndex];
}//end methode
KLICK AUF DIE SCHALTFLÄCHE ZUM LÖSCHEN:
Code:
if(m_data!=null)
{
//Löschen, wenn eine Zeile ausgewählt wurde
//Der State wird nur wegen des oben beschriebenen Fehlers abgefragt
if(m_row!=null && !m_row.RowState.Equals(DataRowState.Deleted))
{ m_row.Delete();
}
}//end if
Also, wie bekomme ich es hin, das er die richtigen Zeilen aus dem DataSet und DataGrid löscht und nicht mit den Indizes durcheinander kommt?

Vielen Dank schon mal im Voraus!