Как использовать LINQ для получения значения ячейки DataGridView - PullRequest
0 голосов
/ 05 октября 2019

Есть ли возможность использовать запрос LINQ для получения значения выделенных ячеек? На рисунке ниже я могу только подсчитать выделенные ячейки в DatGridView и передать число в listBox.

var foundColor = dataGridView1.Rows.Cast<DataGridViewRow>().Select(row => new 
{  
  Count = row.Cells.Cast<DataGridViewCell>().Count(c => c.Style.BackColor == Color.Yellow),
  Name = row.Cells.Cast<DataGridViewCell>().Where(x => x.Style.BackColor == Color.Yellow)
}).ToList();

foundColor.ForEach(s => listBox3.Items.Add($"{s.Count},{s.Name}"));

DataGridView Sample

1 Ответ

2 голосов
/ 05 октября 2019

Вы можете использовать SelectMany для создания плоского списка ваших ячеек.

dataGridView1.Rows.Cast<DataGridViewRow>().SelectMany(row => row.Cells.Cast<DataGridViewCell>())

Теперь у вас есть IEnumerable, вы можете использовать Count или Where, или выбрать значение ячейки.

Считать и выбирать нельзя в одной итерации. Это были бы два запроса.

Но если поместить результат в массив или список и взять длину этого списка, то это будет лучшая идея в плане производительности.

var list =     dataGridView1.Rows.Cast<DataGridViewRow>()
    .SelectMany(row => row.Cells.Cast<DataGridViewCell>())
    .Where(x => x.Style.BackColor == Color.Yellow)
    .Select(cell => cell.Value)
    .ToList();
int count = list.Count;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...