2010-11-25 14 views

Antwort

12
 List<MyItem> items = new List<MyItem>(); 
     foreach (DataGridViewRow dr in dataGridView1.Rows) 
     { 
      MyItem item = new MyItem(); 
      foreach (DataGridViewCell dc in dr.Cells) 
      { 
       ...build out MyItem....based on DataGridViewCell.OwningColumn and DataGridViewCell.Value 
      } 

      items.Add(item); 
     } 
+0

Wenn innerhalb der Foreach-Anweisung ich auf den Wert des ersten Elements in der Zeile zugreifen wollte, wie würde ich dies erreichen? –

+0

Die zweite Foreach würde Ihre Zellendaten enthalten ... Sie bewegen sich Zeile für Zeile ... und extrahieren die Daten aus jeder Zelle innerhalb dieser Zeile. Dann verwenden Sie die DataGridViewCell.OwningColumn, wenn Sie Dinge zusammenpassen müssen, ansonsten ist es linear und Sie können einfach DataGridViewCell.Value verwenden, um den Wert jeder Zelle zu extrahieren, während Sie sich horizontal über die Daten bewegen –

4

Oder ein Linq Weg

var list = (from row in dataGridView1.Rows.Cast<DataGridViewRow>() 
      from cell in row.Cells.Cast<DataGridViewCell>() 
      select new 
      { 
      //project into your new class from the row and cell vars. 
      }).ToList(); 
3
var Result = dataGridView1.Rows.OfType<DataGridViewRow>().Select(
      r => r.Cells.OfType<DataGridViewCell>().Select(c => c.Value).ToArray()).ToList(); 

oder ein String-Wörterbuch des Wertes

var Result = dataGridView1.Rows.OfType<DataGridViewRow>().Select(
      r => r.Cells.OfType<DataGridViewCell>().ToDictionary(c => dataGridView1.Columns[c.OwningColumn].HeaderText, c => (c.Value ?? "").ToString() 
       ).ToList(); 
4

zu erhalten, wenn Sie Ihre Liste mit Datasource binden, können Sie konvertieren zurück durch ,

List<Class> myClass= DataGridView.Datasource as List<Class> ; 
0

IEnumerable.OfType<TResult> Erweiterungsmethode kann Ihr bester Freund hier sein. Hier ist, wie ich es über eine LINQ-Abfrage getan hätte:

Verwandte Themen