2010-11-25 4 views

Répondre

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

Si dans l'instruction foreach je voulais accéder à la valeur du premier élément de la rangée, comment j'accomplirais cela? –

+0

La deuxième foreach contiendrait vos données de cellule ... vous vous déplacez ligne par ligne ... tout en extrayant les données de chaque cellule dans cette rangée. Utilisez ensuite DataGridViewCell.OwningColumn si vous avez besoin de faire correspondre les choses, sinon il est linéaire et vous pouvez simplement utiliser DataGridViewCell.Value pour extraire la valeur de chaque cellule lorsque vous vous déplacez horizontalement à travers les données –

4

Ou une manière LINQ

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(); 

ou pour obtenir un dictionnaire de chaîne des valeurs

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

Si vous liez votre liste à l'aide DataSource, vous pouvez reconvertir en ,

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

IEnumerable.OfType<TResult> méthode d'extension peut être votre meilleur ami ici. Voici comment je l'aurais fait à travers une requête LINQ:

List<MyItem> items = new List<MyItem>(); 
dataGridView1.Rows.OfType<DataGridViewRow>().ToList<DataGridViewRow>().ForEach(
       row => 
       { 
        foreach (DataGridViewCell cell in row.Cells) 
        { 
         //I've assumed imaginary properties ColName and ColValue in MyItem class 
         items.Add(new MyItem { ColName = cell.OwningColumn.Name, ColValue = cell.Value }); 
        } 
       });