【问题标题】:LINQ Select certain cell in DataGridView depending on other cell in rowLINQ 根据行中的其他单元格选择 DataGridView 中的某个单元格
【发布时间】:2010-07-20 15:57:59
【问题描述】:

我是 LINQ 的新手,我正在尝试在我当前的爱好项目中使用它。我有一个datagridview,其中每行的第一个单元格是datagridviewcheckbox,第四个单元格是一个字符串。

如果复选框被选中,我需要将第 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,如何选择选中第一个单元格的行,然后选择第一个单元格的值?我必须把它分成两个集合吗?

谢谢!

【问题讨论】:

    标签: c# linq datagridview


    【解决方案1】:

    我认为这应该可行:

    IEnumerable<string> values = multiContactLookup.Rows.Cast<DataGridViewRow>()
        .Where(row => (bool)row.Cells[0].Value)
        .Select(row => (string)row.Cells[3].Value);
    

    【讨论】:

      【解决方案2】:

      也许不是您一直在寻找的答案,但是...

      DataGridView(与大多数 win-forms 控件一样)不是开始使用 LINQ 的最佳来源。大多数集合没有实现正确的IEnumerable&lt;T&gt; 接口。这就是您需要 Cast() 解决方法的原因。

      通常,请尝试将您的应用程序行为从控件移到数据中。也许您的网格连接到DataTable。在这种情况下,为更改的数据注册 DataTable 的事件并使用 DataRow 的值,而不是 DataGridViewRow 及其单元格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-23
        • 1970-01-01
        相关资源
        最近更新 更多