【问题标题】:How to use LINQ to pass the cell value from DataGridView to ListBox如何使用 LINQ 将单元格值从 DataGridView 传递到 ListBox
【发布时间】:2023-03-29 13:02:01
【问题描述】:

我想将彩色单元格值传递给ListBox。但不幸的是,我不能通过使用以下代码来做到这一点。

我做错了什么?

var cellColorValue = dataGridView1.Rows.Cast<DataGridViewRow>()
                    .SelectMany(row => row.Cells.Cast<DataGridViewCell>()
                    .Where(c => c.Style.BackColor == Color.Yellow)
                    .Select(x => x.Value).ToString()
                    .ToList());
listBox1.Items.Add(cellColorValue);

【问题讨论】:

    标签: c# linq datagridview listbox


    【解决方案1】:

    因此,您正在尝试在列表框中添加项目,但您向它提供了 List 的项目。这意味着,您不能通过简单地调用 Add() 方法来做到这一点。

    您应该做的是,要么将列表 cellColorValue 传递给 AddRange() 方法,要么使用 DataSource 对象绑定值。

    这样做:

    listBox1.Items.AddRange(cellColorValue);
    

    或者

    listBox1.DataSource = cellColorValue;
    listBox1.DataBind(); // Call this method as well to bind the data source.
    

    更新

    我明白了,您生成的对象是 EInumerableAddRange() 方法不接受的对象。我已经重构了您的 LINQ 表达式,因此它被相应地发送到 listbox。假设您想在列表框中获取 DataGridView 的单元格值。见:

    var cellColorValue = dataGridView1.Rows.Cast<DataGridViewRow>()
                        .SelectMany(row => row.Cells.Cast<DataGridViewCell>()
                        .Where(c => c.Style.BackColor == Color.Yellow)
                        .Select(cell => cell.Value.ToString()))
                        .ToArray();
    

    然后像这样将它添加到列表框中:

    listBox1.Items.AddRange(cellColorValue);
    

    【讨论】:

    • 感谢您的提示,Jamshaid。我试过了,但一个或另一个都不起作用……
    • 无法从“System.Collection.Generic.IEnumerable”转换为 System.Windows.Forms.ListBox.ObjectCollection”
    • @Marcel16 乐于助人。如果有帮助,请确保接受答案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多