LINQ Выберите определенную ячейку в DataGridView в зависимости от другой ячейки в строке - PullRequest
3 голосов
/ 20 июля 2010

Я совершенно новый для LINQ и пытаюсь использовать его в своем текущем хобби-проекте.У меня есть datagridview, где первая ячейка каждой строки - datagridviewcheckbox, а 4-я ячейка - строка.

Если флажок установлен, мне нужно добавить значение 4-й ячейки в список.

Сначала я попытался:

var selectedID = from c in multiContactLookup.SelectedCells.Cast<DataGridViewCell>() 
                              select multiContactLookup.Rows[c.RowIndex].Cells[4].Value;

Это не сработало, потому что отмеченные ячейки программно не выбраны, поэтому c никогда не является значением.

Затем япробовал:

var sel2 = from r in multiContactLookup.Rows.Cast<DataGridViewRow>()
                       where r.Cells[0].Value is true select r.Cells[4].Value;

но почему-то мой синтаксис неправильный.

Используя LINQ, как я могу выбрать строки, в которых проверяется первая ячейка, а затем выбрать значение первой ячейки?Должен ли я разделить это на две коллекции?

Спасибо!

Ответы [ 2 ]

8 голосов
/ 20 июля 2010

Я думаю, что это должно работать:

IEnumerable<string> values = multiContactLookup.Rows.Cast<DataGridViewRow>()
    .Where(row => (bool)row.Cells[0].Value)
    .Select(row => (string)row.Cells[3].Value);
2 голосов
/ 20 июля 2010

Возможно, это не тот ответ, который вы искали, но ...

DataGridView (как большинство элементов управления win-формами) - не лучший источник для начала с LINQ.Большинство коллекций не поддерживают правильный интерфейс IEnumerable<T>.Вот почему вам нужен обходной путь Cast().

В общем, старайтесь отодвинуть поведение ваших приложений от элементов управления и данных.Возможно, ваша сетка подключена к DataTable.В этом случае зарегистрируйте события DataTable для измененных данных и работайте со значениями DataRow вместо DataGridViewRow и его ячеек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...