首页 > 解决方案 > 如何使用 LINQ 将突出显示的单元格传递给另一个 DataGridView?

问题描述

有什么方法可以使用 LINQ 样式查询将突出显示的单元格(没有 ComboBox)的值传递给另一个 DataGridView?在下图中,标记了要传输的单元格。

非常感谢您的想法!

       private void Button3_Click(object sender, EventArgs e)
       {
            for (int i = 0; i < dataGridView2.Rows.Count; i++)
            {
                for(int j = 0; j < dataGridView2.Columns.Count; j++)
                {
                    if (!(dataGridView2.Rows[i].Cells[j].Value == null))
                    {
                        var cr = 
                        dataGridView2.Rows[i].Cells[j].Style.BackColor = 
                        Color.Red; 
                        var cg = 
                        dataGridView2.Rows[i].Cells[j].Style.BackColor = 
                        Color.LawnGreen;

                        dataGridView3.Rows.Add(cr);
                        dataGridView3.Rows.Add(cg); 

                    }
                }
            }
        }




在此处输入图像描述

标签: c#linqdatagridview

解决方案


好的,这是一些使用 linq 的示例代码,它将复制单元格具有特定背景颜色的值。使用 Linq 的关键是Cast方法,它可以采用非泛型IEnumerable并将其转换为泛型IEnumerable,因此我们可以使用 linq 语法。它还使用Select包含索引参数的重载,因此您可以轻松地索引到第二个数据网格以获取正确的行/列。

var linqable = dataGridView2.Rows.Cast<DataGridViewRow>().Select((r, y) => new
{
    row = r,
    rowNum = y,
    cells = r.Cells.Cast<DataGridViewCell>().Select((a, b) =>
    new
    {
        cell = a,
        cellNum = b
    })
});

foreach(var row in linqable)
{
    foreach(var cellWithRed in row.cells.Where(x => x.cell.Style.BackColor == Color.Red))
    {
        dataGridView3.Rows[row.rowNum].Cells[cellWithRed.cellNum].Value = cellWithRed.cell.Value;
    }
}

推荐阅读