【发布时间】:2021-11-12 09:55:03
【问题描述】:
在我的 DataGridView (DGV1) 中,我有一个包含不同字符串值 (N1-N9) 的表。其中一些单元格值以黄色突出显示(这在表中显示为粗体(N1、N5、N6))。我想将这些选定的单元格添加到 ListBox 中,如下所示。
var foundValues = dataGridView1.Rows.Cast<DataGridViewRow>().Select(row => new
{
Name = row.Cells[row.Cells.Cast<DataGridViewCell>().First(cell => cell.OwningColumn.HeaderText == "XX").ColumnIndex].Value,
ColorValue = row.Cells.Cast<DataGridViewCell>().Where(c => c.Style.BackColor == Color.Yellow).Select(cell => cell.Value.ToString()),
Count = row.Cells.Cast<DataGridViewCell>().Count(c => c.Style.BackColor == Color.Yellow),
}).ToArray();
foreach (var s in foundValues)
{
listBox1.Items.Add($"{s.Name}, {s.ColorValue}, {s.Count}");
}
很遗憾,我的输出包含错误。黄色突出显示的单元格值(字符串)未显示在 ListBox 中。
DD1, System.Linq.Enumerable + WhereSelectEnumerableIterator‘2[SystemWindows.Forms.DataGridViewCell,System.String],1
DD2, System.Linq.Enumerable + WhereSelectEnumerableIterator‘2[SystemWindows.Forms.DataGridViewCell,System.String],2
DD3, System.Linq.Enumerable + WhereSelectEnumerableIterator‘2[SystemWindows.Forms.DataGridViewCell,System.String],0
谁能帮帮我?非常感谢!
【问题讨论】:
-
您可能想尝试检查
c.Style.BackColor值。也许您需要转换为 ARGB 进行比较,因为命名颜色具有特殊属性.. -
这不起作用。使用以下代码,可以从 DatagridView 中提取黄色标记的单元格值并显示在 ListBox 中: var cellColorValue = dataGridView1.Rows.Cast
() .SelectMany(row => row.Cells.Cast () .Where(c => c.Style.BackColor == Color.Yellow) .Select(cell => cell.Value.ToString())) .ToArray(); -
listBox1.Items.AddRange(cellColorValue);唯一的问题是标记的单元格值是在它们之间列出的。
-
标记的单元格值在它们之间列出。 这是什么意思?你能在你的帖子中显示错误的结果吗?
-
这些值被放置在一列中,在另一列之下:在这种情况下,选定的单元格值显示在 ListBox 中,如下所示: N1 N5 N6 因此,我想要的是,其中的值列表框如下所示:D1, N1,1 D2, N5, N6, 2 D3, 0(见上图)
标签: c# datagridview listbox