2017-08-07 3 views
0

Ich habe die Datenquelle von Datagridview als Datensatz festgelegt. Ich möchte dieser Datagridview eine neue Zeile hinzufügen. Diese neue Zeile sollte bearbeitbar sein und ich muss diese Daten in meiner Datenbank speichern. Wie kann ich das erreichen?Wie fügt man der Datagridview eine neue Zeile hinzu und bearbeitet sie in C# winform?

// Datenquelle ist

gesetzt
dataGridView.DataSource = ds.Tables[0]; 

// Neue Reihe

private void button_add_Click(object sender, EventArgs e) 
{ 
    DataTable dt = dataGridView.DataSource as DataTable; 
    dt.Rows.Add(); 
    dataGridView.DataSource = dt; 
} 

// Dies schafft eine neue Zeile, aber es ist nicht editierbar.

P.S. Ich bin ein Anfänger in C#

Edit: Kann jemand bitte einen Link/Beispiel, wo ich direkt hinzufügen, bearbeiten, löschen von Datagridview ohne irgendein Formular?

+0

Haben Sie dies überprüft http://www.c-sharpcorner.com/UploadFile/1e050f/insert-update-and-delete-record-in-datagridview-C-Sharp/. Es deckt die meisten datagridview-Operationen ab. –

+0

@SouvikGhosh Dieses Beispiel enthält ein Formular zum Füllen für die Einfügung, aber ich möchte eine Zeile zu meiner vorhandenen Datagridansicht hinzufügen, Daten hinzufügen und speichern –

Antwort

0
private void button_add_Click(object sender, EventArgs e) { 
    foreach (DataGridViewRow row in DataGridView1.Rows) { 
     if (// condition for true) { 
      row.Rows[row that should be editable].ReadOnly = true; 
     } else if(// condition for false) { 
      row.Rows[row that schould not be editable].ReadOnly = false; 
     } 
     var value = row.Cells[cellindex].Value; 
    } 
} 
0

Ich nehme an, Ihr Problem hier ist, dass Sie wollen, dass der Rest des DataGridView ReadOnly ist? Leider sind die beiden Eigenschaften AllowUserToAddRows und ReadOnly widersprüchlich, wenn ReadOnly wahr ist, wird AllowUserToAddRows tatsächlich eine neue Zeile geben, aber Sie können sie nicht bearbeiten.

Also, wenn Sie das wirklich wollen, dann müssen Sie ein wenig kreativ sein. Es gibt mehr als einen Weg, aber so etwas sollte funktionieren. Setzen Sie AllowUserToAddRows auf True und ReadOnly auf False. Fügen Sie ein privates Feld:

private int addedRowIndex = -1; 

nächstes ein paar Ereignisse hinzufügen:

private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e) 
{ 
    addedRowIndex = dataGridView1.NewRowIndex - 1; 
} 

und

private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) 
    { 
     if (!dataGridView1.Rows[e.RowIndex].IsNewRow) 
     { 
      if (addedRowIndex != e.RowIndex) 
      { 
       e.Cancel = true; 
      } 
     } 
    } 
} 

Dies die Wirkung der Aufhebung alle Änderungen an alten Zeilen haben.

Bitte beachten Sie jedoch, dass ich selbst nie so etwas mache. Ich habe viele, viele Formen mit DataGridViews und sie sind immer ReadOnly True und AllowUserToAddRows false. Um einen neuen Datensatz hinzuzufügen, stelle ich eine Schaltfläche bereit, die ein Modal-Formular öffnet, mit dem der Benutzer den neuen Datensatz eingeben kann. Dieser Datensatz wird dann in der Datenbank gespeichert und das Formular geschlossen. An diesem Punkt wird die DataGridView aktualisiert. Ich finde, dass es viel einfacher ist, Einträge vor dem Speichern zu validieren. Nicht nur das, aber es ist viel einfacher, spezielle Steuerelemente für bestimmte Datentypen bereitzustellen, wobei Daten ein sehr gutes Beispiel sind. Ich kenne Leute, die den Komfort eines Tabellenkalkulationstyps "Aussehen und Verhalten" mögen, aber eine Datenbankanwendung sollte die Datenintegrität an erste Stelle setzen.

Verwandte Themen