2009-07-22 13 views
1

Ich habe eine Datagridview, die anfänglich an eine leere Datentabelle gebunden ist. Dann wird die erste Zeile gefüllt, indem Werte für die Spalten der CurrentRow.DataBoundItem-Zeile des Rasters festgelegt werden. Ich gebe eine neue Zeile manuell ein, indem ich Werte in die letzte leere Zeile eintippe. Ich drücke eine Speichern-Taste, die folgendes bewirkt: DataTable dt = (DataTable) MyGrid.DataSource .......DataGridView.DataSource hat keine neue Zeile aus dem Raster (.NET)

Ich bemerkte die Anzahl der Zeilen in dt ist nur 1 anstelle der beiden im Raster angezeigt. Wenn ich jedoch zuerst die Eingabetaste in der Zeile drücke und dann auf Speichern klicke, beträgt die Anzahl der Zeilen 3. Die zwei gefüllten Zeilen plus die neue Zeile, die durch die Eingabetaste verursacht wird.

Wie bekomme ich die zwei Zeilen in der Datentabelle, ohne die Eingabetaste zu drücken? (Ich möchte nicht programmgesteuert einen Enter-Tastenanschlag senden)

Ich habe versucht, die EndEdit() und UpdateCellValue() zu akzeptieren, um die neue Zeile zu akzeptieren, aber die Datenquelle zeigt immer noch nur eine Zeile.

+0

Bindest du nach jedem Ereignis richtig? – Jason

Antwort

0

Ich musste eine Bindungsquelle hinzufügen, an die das Gitter bindet, anstatt an eine Datentabelle zu binden.

0

Ich antwortete vor kurzem eine similar question, Sie sollten Form.Validate() verwenden, um Daten zurück zu dem zugrunde liegenden Geschäftsobjekt (Ihre DataTable) zu schieben, bevor Sie Ihre Änderungen in der Datenbank speichern.

+0

Ich habe bereits Validate() verwendet –

0

Wie Jason erwähnt, stellen Sie sicher, dass Sie das Gitter wieder binden, nachdem Sie in Ihre DataTable einfügen.

myGrid.DataSource = dt; 
myGrid.DataBind(); <----- 
+0

Ich bin nicht an eine Datentabelle gebunden. Ich erhalte eine Referenz von der Datenquelle des Gitters zu einer Datentabelle, um die Werte aus dem Gitter zu erhalten. –

1

Wenn Sie über Windows Apllication reden, wie ich denke, können Sie einfach hinzufügen ds.AcceptChanges();

if (txtUserId.Text.Trim() != "" && txtPasswoed.Text.Trim() != "" && txtUserName.Text.Trim() != "") 
      { 
       DataRow r = ds.Tables[0].NewRow(); 
       r["userName"] = txtUserName.Text.Trim(); 
       r["ID"] = txtUserId.Text.Trim(); 
       r["Password"] = txtPasswoed.Text.Trim(); 
       ds.Tables[0].Rows.Add(r); 

       ds.AcceptChanges(); 

       txtPasswoed.Clear(); 
       txtUserName.Clear(); 
       txtUserId.Clear(); 
      } 
Verwandte Themen