【问题标题】:How can i use LINQ to pass highlighted Cells to another DataGridView?如何使用 LINQ 将突出显示的单元格传递给另一个 DataGridView?
【发布时间】:2019-08-12 17:32:21
【问题描述】:

有没有办法使用 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); 

                    }
                }
            }
        }




【问题讨论】:

  • 您的问题是是否可以使用 linq 查询具有特定样式的单元格的行?
  • 我仍在寻找将标记单元格的值传输到另一个 DataGridView 的可能性。我认为使用 LINQ 查询解决问题会更容易。但是,任何相关方都可以提出其他解决方案。
  • 其他DataGridView是否有相同的列?您是要复制整行,还是只复制突出显示的值?
  • 我希望仅将突出显示的值复制到另一个 DataGridView。是的,其他 dataGridView3 有相同的列。

标签: c# linq datagridview


【解决方案1】:

好的,这里有一些使用 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;
    }
}

【讨论】:

  • 非常感谢!但是我如何“轻松”索引 dataGridView2 以获得正确的行/列?不过,你做得很好,泽夫!!
  • 如果 dataGridView2 是源,您将拥有基于 rowNum 属性和 cellNum 属性的行/列的索引(两者都是我在匿名类型中使用的名称)。 CastSelect 方法作用于行/单元格的现有顺序,因此索引(select 方法的第二个参数)也是网格中行或行中单元格的索引。跨度>
  • 太棒了!非常感谢你,泽夫! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
  • 2023-03-29
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
相关资源
最近更新 更多