【问题标题】:How to use LINQ to get DataGridView cell Value如何使用 LINQ 获取 DataGridView 单元格值
【发布时间】:2019-10-05 07:03:02
【问题描述】:

是否有可能使用 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}"));

【问题讨论】:

标签: c# linq datagridview


【解决方案1】:

您可以使用 SelectMany 创建单元格的平面列表。

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

现在你有了一个 IEnumerable,你可以使用 Count,或者 Where,或者 Select the value of the cell。

Count 和 Select 不能在同一个迭代中进行。那将是两个查询。

但是,就性能而言,将结果放入一个数组或列表并获取该列表的长度会是更好的主意。

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;

【讨论】:

  • 非常感谢您的所有努力,霍尔格。这是一种有趣的方法,但我只能计算突出显示的单元格。使用您的代码,我无法将突出显示的单元格值传递到列表框中。该怎么做?
  • @Marcel16 使用list,它包含你想要的值。
  • 谢谢你的建议,Sнаđошƒаӽ!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多