2010-05-07 6 views
3

J'utilise une boucle foreach pour remplir chaque ligne d'un DataGridView avec une chaîne. Je dois rechercher le DataGridView pour m'assurer que je n'ajoute pas une chaîne qui est déjà là. Quelle est la meilleure façon de procéder?rechercher une chaîne dans DataGridView

Voici mon code à ce jour:

foreach (String file in openFileDialog.FileNames) 
    {          
     // todo: make sure file string does not already exist in DataGridView 
     dataGridView1.Rows.Add(); 
     dataGridView1.Rows[i].Cells[1].Value = file; 
     i++; 
    } 

S'il vous plaît noter qu'il peut y avoir déjà des noms de fichiers dans le DataGridView d'une exécution précédente du code.

+0

voir la mise à jour – hunter

Répondre

4

Il est une bonne idée pas d'utiliser un DataGridView comme magasin de données. C'est un contrôle pour afficher des choses.

Il est préférable de le lier à certains magasins de soutien et faire vos opérations sur ce point:

var table = new HashSet<string>(); 

table.Add("aa"); 
table.Add("bb"); 
table.Add("aa"); 

dataGridView1.AutoGenerateColumns = true; 
dataGridView1.DataSource = table.ToList(); 

Et lorsque de nouvelles un nouveau lot de fichiers arrive, les ajouter à la HashSet et re-lier simplement le La grille.

2

Je pense que cela va faire:

foreach(string file in dialog.FileNames) 
    if (!dataGridView1.Rows.Cast<DataGridViewRow>().Any(r => r.Cells[1].Value == file)) 
     dataGridView1.Rows.Add(new string[]{ file }); 
+1

Allez! Il y a tellement de choses LINQ ici c'est malade, juste malade. Regardez! Vous avez un Cast <> et un Any()! C'est de l'or que je te dis, de l'or pur! – hunter

+0

:) Votre code semble génial, mais mon approche initiale était erronée. – LFurness

2
foreach (String file in openFileDialog.FileNames.Distinct()) 
    {          
     // todo: make sure file string does not already exist in DataGridView 
     dataGridView1.Rows.Add(); 
     dataGridView1.Rows[i].Cells[1].Value = file; 
     i++; 
    } 

(En supposant C# 3.0 et extensions LINQ pour IEnumerable <>)

+0

Bien que cela supprime les doublons de ce 'openFileDialog', il ne vérifiera pas si le nom est déjà dans la grille de données d'une exécution précédente du code. – ChrisF

+0

Merci pour cette réponse, mais ChrisF a tout à fait raison. – LFurness

+0

Ah oui; Je supposais une grille vide. – Pierreten

Questions connexes