2016-04-15 2 views
1

Ich habe eine DataGridView 'DGV_MachinesExclusion', die an eine DataTable 'ExcludedMachines' gebunden ist. Beim manuellen Hinzufügen einer neuen Zeile in der DataGridView verwende ich das CellValueChanged-Ereignis der DataGridView, um den folgenden Code auszulösen.Das dynamische Hinzufügen einer Zeile zur Datentabelle fügt zwei Zeilen hinzu

 private void DGV_MachinesExclusion_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
    { 
     DataRow dr = ExcludedMachines.NewRow(); 
     dr = ((DataRowView)DGV_MachinesExclusion.Rows[0].DataBoundItem).Row; 
     ExcludedMachines.Rows.Add(); 
     UpdateExlusionList(); 
    } 

Das Ergebnis ist, dass es zwei Zeilen hinzufügt. Eine leere Zeile und eine Zeile mit den manuell hinzugefügten Daten. Die Methode 'UpdateExclusionList()' schreibt die DataTable einfach in eine XML-Datei. Ich habe diese Art des dynamischen Hinzufügens von Zeilen erfolgreich in der Vergangenheit verwendet. Kann jemand erklären, warum dieser Code zwei Zeilen hinzufügt?

Thx, Thomas

Antwort

0

Die Linie

ExcludedMachines.Rows.Add(); 

würde eine leere Zeile hinzugefügt werden, da Sie nicht in der ‚Hinzufügen‘ Funktion festgelegt haben, was zu den Zeilen hinzuzufügen - sollten Sie setzen

ExcludedMachines.Rows.Add(dr); 

statt diese Zeile zu füllen.

Wenn Sie das Ereignis auslösen, ändert es den Zellenwert, der es ausgelöst hat (d. H. Löst es das Ereignis mehr als einmal aus, wenn Sie erwarten, dass es nur einmal ausgeführt wird)? Und haben Sie die 'UpdateExclusionList()' Methode, die definitiv keinen zusätzlichen Zeilenerstellungscode enthält, durch Zufall überprüft (aus einem Test möglicherweise herausgekommen?)?

Hoffe, das hilft.

+1

Sie haben Recht, dass eine weiße Zeile hinzugefügt wird, da die Zeile nicht ausgefüllt ist. Ich habe das bereits geändert, aber dann werden nur zwei aufgefüllte Zeilen hinzugefügt. Die 'UpdateExclusionList()' Methode fügt definitiv keine Zeilen hinzu, weil ich das Ereignis ohne den Code über dieser Methode getestet habe. Der DataTable ist nichts passiert. –

+0

Wenn ich eine Pause mache, wird es nur einmal gestoppt. Ich denke also nicht, dass das Ereignis zweimal ausgelöst wird. Wenn ich die Zeile "ExcludedMachines.Rows.Add()" aus dem Code herauslasse, wird nichts zur DataTable hinzugefügt ... –

+0

Das würde darauf hindeuten, dass das Problem in der DataRow-Zeile liegt. Haben Sie versucht: 'DataRow dr = ((DataRowView) DGV_MachinesExclusion.Rows [0] .DataBoundItem) .Row ' und dann das direkt in die Tabelle hinzufügen? –