2016-03-30 8 views
0

Ich benutze bearbeitbare DataGridView, wo ich die Zeile nach dem Bearbeiten der Zeilen in DataGridView erhalten möchten.Holen DataRow von bearbeitbaren DataGridView in Windows Forms-Anwendung

Hier ist mein DataGridView Screenshot:

enter image description here

Mein Problem ist:

Ich kann so viele Zeilen eingeben ich kann. Wenn ich auf die Schaltfläche "Register" klicke, kann ich die Zeilen nicht von der DataGridView abrufen.

Was ich versucht ist:

private void enrollmentRegisterButton_Click(object sender, EventArgs e) 
    { 
     DataTable data = (DataTable)(childrenDetailsDataGridView.DataSource); 
     DataRow[] drArray = new DataRow[data.Rows.Count]; 
     data.Rows.CopyTo(drArray, 0); 
    } 

Was ich will, ist:

ich sollte die DataRow eingegeben dynamisch im DataGridView bekommen können.

+0

Haben Sie 'DataSource' des Gitters zu einem' DataTable' gesetzt? Meinen Sie, dass Sie nach dem Laden von Daten nur neue Zeilen hinzufügen müssen? –

+0

Ich habe die Lösung gefunden – Vikash

+0

** - ** Warum haben Sie alle Eigenschaften von 'Child' als String definiert? ** - ** Wo ist die Definition der Klasse "Kind"? ** - ** Die aktuelle Antwort hat einige Probleme. Außerdem gibt es bessere Möglichkeiten, Werte zu erhalten und eine getippte Liste zu füllen. ** - ** Wenn Sie eine bessere Antwort erhalten möchten, bearbeiten Sie Ihre Frage. Jetzt haben Frage und Antwort nichts miteinander zu tun. –

Antwort

0

gefunden Lösung:

List<Child> childrenList = new List<Child>(); 


      foreach (DataGridViewRow row in childrenDetailsDataGridView.Rows) 
      { 
       bool IsRowEmpty = true; 
        if (row.Cells.Count > 0) 
        { 
         Child child = new Child(); 
         if (row.Cells["Childname"].Value !=null) 
         { 
          IsRowEmpty = false; 
          child.Childname = row.Cells["Childname"].Value.ToString(); 
         } 

         if (row.Cells["Gender"].Value != null) 
         { 
          child.Gender = row.Cells["Gender"].Value.ToString(); 
         } 

         if (row.Cells["Age"].Value != null) 
         { 
          child.Age = row.Cells["Age"].Value.ToString(); 
         } 

         if (row.Cells["Star"].Value != null) 
         { 
          child.Star = row.Cells["Star"].Value.ToString(); 
         } 

         if (row.Cells["Occupation"].Value != null) 
         { 
          child.Occupation = row.Cells["Occupation"].Value.ToString(); 
         } 
         if (!IsRowEmpty) 
         { 
          childrenList.Add(child); 
         } 

        } 
      } 

Es ist sehr einfach.

1

Um Daten von DataGridView zu erhalten, machen Sie Ihren Code so. Und dann können Sie Zeilen aus DataTable nehmen.

private void button1_Click(object sender, EventArgs e) 
    { 
     // Getting data from DataGridView 
     DataTable myDt = new DataTable(); 
     myDt = GetDTfromDGV(dataGridView1); 
    } 
private DataTable GetDTfromDGV(DataGridView dgv) 
    { 
     // Macking our DataTable 
     DataTable dt = new DataTable(); 
     dt.Columns.AddRange(new DataColumn[6] 
      { 
       new DataColumn(dgv.Columns[0].Name, typeof(string)), 
       new DataColumn(dgv.Columns[1].Name, typeof(string)), 
       new DataColumn(dgv.Columns[2].Name, typeof(string)), 
       new DataColumn(dgv.Columns[3].Name, typeof(string)), 
       new DataColumn(dgv.Columns[4].Name, typeof(int)), 
       new DataColumn(dgv.Columns[5].Name, typeof(int)) 
      }); 
     // Getting data 
     foreach (DataGridViewRow dgvRow in dgv.Rows) 
     { 
      DataRow dr = dt.NewRow(); 
      for (int col = 0; col < dgv.Columns.Count; col++) 
      { 
       dr[col] = dgvRow.Cells[col].Value == null ? DBNull.Value : dgvRow.Cells[col].Value; 
      } 
      dt.Rows.Add(dr); 
     } 
     // removing empty rows 
     for (int row = dt.Rows.Count - 1; row >= 0; row--) 
     { 
      bool flag = true; 
      for (int col = 0; col < dt.Columns.Count; col++) 
      { 
       if (dt.Rows[row][col] != DBNull.Value) 
       { 
        flag = false; 
        break; 
       } 
      } 
      if (flag == true) 
      { 
       dt.Rows.RemoveAt(row); 
      } 
     } 
     return dt; 
    } 
0

Und wenn Sie Liste zurückzukehren

private void button1_Click(object sender, EventArgs e) 
{ 
    // Getting data from DataGridView 
    var list = GetDTfromDGV(dataGridView1); 
} 

private dynamic GetDTfromDGV(DataGridView dgv) 
{ 
    ..... 
    ..... 

    var list = dt.AsEnumerable().ToList(); 

    return list; 
} 
Verwandte Themen