найти строку в DataGridView - PullRequest
3 голосов
/ 07 мая 2010

Я использую цикл foreach для заполнения каждой строки в DataGridView строкой. Мне нужно выполнить поиск в DataGridView, чтобы убедиться, что я не добавляю строку, которая уже существует. Каков наилучший способ сделать это?

Вот мой код:

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++;
    }

Обратите внимание, что в DataGridView уже могут быть имена файлов из предыдущего запуска кода.

Ответы [ 3 ]

4 голосов
/ 07 мая 2010

Хорошая идея , а не , использовать DataGridView в качестве хранилища данных. Это элемент управления для отображения материала.

Лучше привязать его к какому-нибудь бэк-хранилищу и выполнить операции с ним:

var table = new HashSet<string>();

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

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

И когда приходит новая новая группа файлов, добавьте их в HashSet и просто заново привязайте Grid.

2 голосов
/ 07 мая 2010
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++; 
    } 

(Предполагается, что C # 3.0 и расширения LINQ для IEnumerable <>)

2 голосов
/ 07 мая 2010

Я думаю, что это будет делать:

foreach(string file in dialog.FileNames)
    if (!dataGridView1.Rows.Cast<DataGridViewRow>().Any(r => r.Cells[1].Value == file))
        dataGridView1.Rows.Add(new string[]{ file });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...