Select 选中 DataGridViewCheckBoxCell 的所有行中的一个值

Select a value in all Rows where a DataGridViewCheckBoxCell is checked

我需要获取 Names 列中的所有值,当用户单击 Add 按钮时,Select 列中的复选框会被选中。
这些值需要存储在一个数组中。

有人可以帮帮我吗?

这是带有 DataGridView 和 Button 的屏幕截图

由于您将 DataGridView.DataSource 属性 设置为看起来像是 DataTable 的内容,但数据源没有 bool 列,只有一个列提供字符串值,您已在设计器中添加了 DataGridViewCheckBoxColumn;或手动,在某些时候。

在这种情况下,如果允许向控件添加新行,则循环 DataGridView.Rows 集合,跳过 NewRowIndex 处的行。

几个例子。

使用 LINQ:
使用 Convert.ToBoolean() 处理 null 值,因为我不知道您如何设置 CheckBoxCell 样式。在默认实现中,null 是 Cell 的初始值(稍后绑定数据源)。

var values = dgvSelectGenre.Rows.OfType<DataGridViewRow>()
    .Where(dgr => !dgr.IsNewRow && Convert.ToBoolean(dgr.Cells["colGenSelect"].Value))
    .Select(r => r.Cells["Name"].Value.ToString())
    .ToList();

标准foreach循环:
在这里,一个略有不同的方法,转换为 bool? Cell.Value 并在 (bool?).Value

之前测试 (bool?).HasValue
var names = new List<string>();
foreach (DataGridViewRow r in dgvSelectGenre.Rows) {
    if (r.IsNewRow) continue;
    var selected = (bool?)r.Cells["colGenSelect"].Value;
    if (selected.HasValue && selected.Value) {
        names.Add(r.Cells["Name"].Value.ToString());
    }
}