2016-04-03 13 views
0

geändert Ich versuche, einen ansprechenden Datagridview-Tisch zu machen, aber ich habe einige Schwierigkeiten habe, wenn der Wert des Feldes zu aktualisieren. Wenn ich das Feld bearbeiten, lassen Sie es aus und drücken Sie auf eine Schaltfläche zum Aktualisieren - alles funktioniert. Wenn ich einer der Auslöser wie CellValueChanged oder `CellEndEdit‘ Ich erhalte eine FehlermeldungC# Refresh DataSet Wenn Wert

An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll 

Additional information: Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function. 


private void Sync() 
{ 
SqlCommandBuilder cmdr = new SqlCommandBuilder(prekes); 
prekes.Update(d.Tables["Prekes"]); 
Refresh(); 
} 

private void Refresh() 
{ 
dataGridView1.AutoGenerateColumns = false; 
d = new DataSet(); 
prekes.Fill(d, "Prekes"); 
dataGridView1.DataSource = d.Tables[0]; 
} 

dataGridView1.DataSource = d.Tables [0]; .. ist, wo ich den Fehler

Bitte beachten Sie, dass ich nur diesen Fehler bin immer wenn ich auf um, einige erste Mal es ganz gut funktioniert. Sollte ich versuchen zu fangen und Ausnahmen oder etwas, wenn das passiert und es ignorieren? Oder sollte ich einen anderen Trigger als CellEndEdit verwenden?

+0

Warum mit einem Datensatz arbeiten? Eine DataTable sollte hier ausreichen. Laden Sie die Daten in die DataTable, ändern Sie die Daten und rufen Sie schließlich GetChanges() auf der DataTable und Update mit einem DataAdapter. Grüße –

+0

Sie räumen den Datensatz mit d = new DataSet(), so dass die nächsten Fill-Anweisung wird einen Fehler null zu geben. – jdweng

Antwort

1

versuchen, den folgenden Code-Schnipsel in Ihrer Aktualisierungsmethode

prekes.Clear();//dataset.clear 
    dataAdaoter.Fill(prekes);//DataAdapter.Fill 
+1

Sieht aus wie es funktioniert. Das hat den Fehler verursacht. Ich werde dies als beantwortet markieren, sobald es mich lässt. Vielen Dank! – Argus

+0

@Argus: Gut, dass es geholfen hat :) –