2011-08-05 1 views
1

Je souhaite prendre chaque ligne dans un DataGridView et l'ajouter à une variable chaîne que j'imprimerai ensuite à l'aide d'une classe PrintDocument personnalisée. Tout fonctionne dans mon programme, sauf pour obtenir les données de datagridview dans la variable de chaîne. Je ne peux pas trouver un exemple sur la façon de le faire. N'utiliserais-je pas simplement un "foreach (DataRow Row dans dataGridView1) ..." pour faire une boucle dans la table de données et l'ajouter à ma variable de chaîne? Quelqu'un peut-il me montrer un exemple de cela?Récupération des données de datagridview à la chaîne

À l'heure actuelle, mon code ressemble à ceci, mais il ne sera pas compilé (obtenir un message d'erreur sur la façon dont j'essaie d'obtenir la valeur de column.row dans la chaîne. meilleur match de surcharge méthode pour 'System.Windows.Form.DataGridViewRowCollection.This [int]' a des arguments non valides) .:

 //Loop through the dataGridView1 and add it to the text 
     //that we want to print 
     foreach (DataRow row in dataGridView1.Rows) 
     { 
      textToPrint = textToPrint + dataGridView1.Rows[row][0].ToString() + "\t" + 
       dataGridView1.Rows[row][1].ToString() + "\t" + 
       dataGridView1.Rows[row][2].ToString() + "\t" + 
       dataGridView1.Rows[row][3].ToString() + "\t"; 
     } 
+0

Les données sont-elles modifiées de quelque façon que ce soit sur le GridView? Parce que, si c'était moi, je prendrais l'objet de données qui est en train de peupler la grille et qui passerait en boucle. – Zensar

+0

Malheureusement, les données de datagridview proviennent d'une myriade de sources (tables et entrées utilisateur). Mon intention était de saisir toutes les données provenant des différentes sources, de tout mettre dans un contrôle visible afin que l'utilisateur puisse les voir et les imprimer, si elles le veulent. – Kevin

Répondre

4

Je recommande une méthode plus générique pour faire cela afin de ne pas avoir à le réécrire dans le futur. Cela sera également indépendant du nombre de colonnes que vous pourriez avoir dans votre DataGridView.

public static string DGVtoString(DataGridView dgv, char delimiter) 
    { 
     StringBuilder sb = new StringBuilder(); 
     foreach (DataGridViewRow row in dgv.Rows) 
     { 
      foreach (DataGridViewCell cell in row.Cells) 
      { 
       sb.Append(cell.Value); 
       sb.Append(delimiter); 
      } 
      sb.Remove(sb.Length - 1, 1); // Removes the last delimiter 
      sb.AppendLine(); 
     } 
     return sb.ToString(); 
    } 
+0

C'est une bonne petite routine. Je n'ai jamais utilisé la classe StringBuilder avant, donc c'est très intéressant pour moi. Je vous remercie! – Kevin

+0

De rien. Les StringBuilders sont beaucoup plus efficaces en termes de mémoire et de vitesse pour rejoindre un tas de petites chaînes ensemble. Je les utiliserais toujours si tu devais rejoindre plus de 3 cordes ensemble. – Moop

0

Essayez cette

dataGridView.Rows[RowIndex].Cells[ColumnIndex].Value as string

for (int row = 0 ; row < dataGridView1.Rows.Count; row ++) 
{ 
    textToPrint = textToPrint + 
    dataGridView1.Rows[row].Cells[0].Value.ToString() + "\t" + 
    dataGridView1.Rows[row].Cells[1].Value.ToString() + "\t" + 
    dataGridView1.Rows[row].Cells[2].Value.ToString() + "\t" + 
    dataGridView1.Rows[row].Cells[3].Value.ToString() + "\t"; 
} 
Questions connexes