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());
}
}
我需要获取 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());
}
}