Hinzufügen eines Datensatzes über ein DataGrid

22/04/2008 - 17:05 von Ronald Rode | Report spam
Hallo NG,

ich habe ein DataGridView, welches an ein DataTable gebunden ist. Nun möchte
ich über das Grid einen Datensatz zu dem DataTable hinzufügen. In meinem
DataTable lassen einige Spalten keinen Nullwert zu. Wenn ich dann aber
einfach eine dieser Spalten im DataGrid leer lasse und in eine andere Zeile
wechsel, wechselt er aber die ebend von mir angelegt Zeile wird gelöscht.
Fülle ich alle benötigten Spalten aus wird die Spalte auch gespeichert.
Welches Event muss ich abfangen damit ich das löschen verhinder bzw.
unterbinde das der Benutzer die Zeile unvollstàndig verlàßt.

Vielen Dank für die Hilfe.
 

Lesen sie die antworten

#1 Frank Dzaebel
22/04/2008 - 19:39 | Warnen spam
Hallo Ronald,

ich habe ein DataGridView, welches an ein DataTable gebunden ist.



Ich schàtze Du meinst hier, dass die DataSource Eigenschaft des
DataGridView direkt auf den DataTable gesetzt ist, anstatt
etwa über einen BindingSource.


Nun möchte ich über das Grid einen Datensatz zu dem DataTable hinzufügen.
In meinem DataTable lassen einige Spalten keinen Nullwert zu. Wenn ich
dann aber einfach eine dieser Spalten im DataGrid leer lasse und in eine
andere Zeile wechsel, wechselt er aber die ebend von mir angelegt Zeile
wird gelöscht. Fülle ich alle benötigten Spalten aus wird die Spalte auch
gespeichert. Welches Event muss ich abfangen damit ich das löschen
verhinder bzw. unterbinde das der Benutzer die Zeile unvollstàndig
verlàßt.



Dafür, dass man eine Eingabe verhindert, ist
in Deinem Fall wohl das RowValidating sinnvoll.
Nur als Beispiel, hier ein Pseudo-Code:

{
// ...
dataGridView1.RowValidating += new DataGridViewCellCancelEventHandler(
dataGridView1_RowValidating);
}
void dataGridView1_RowValidating(object sender,
DataGridViewCellCancelEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
DataGridViewRow row = dgv.Rows[e.RowIndex];
if (row.Cells[2].Value == DBNull.Value)
e.Cancel = true;
}


____________________________________
Da das Validieren auch stattfindet, wenn der User nichts
geàndert hat, hier noch mal als Referenz die Möglichkeit,
eine Änderung abzufangen:

CurrencyManager cm;
{
/ ...
cm = (CurrencyManager)BindingContext[
dataGridView1.DataSource, dataGridView1.DataMember];
cm.ItemChanged += new ItemChangedEventHandler(cm_ItemChanged);
}

void cm_ItemChanged(object sender, ItemChangedEventArgs e)
{
DataRow curRow = ((DataRowView)cm.List[e.Index]).Row;
}


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

Ähnliche fragen