添加 CheckBox 列?的方式有两种
1、?设计时添加?
在 DataGridView 的属性面板中,通过 ?Columns 集合编辑器? 添加 DataGridViewCheckBoxColumn,设置列名(如 chkSelect)和标题文本(如“选择”)?。
若需绑定数据,需设置 DataPropertyName 为数据源中的布尔字段(如 IsSelected)。
?2、动态代码添加?
DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn();
checkBoxColumn.Name = "chkSelect";
checkBoxColumn.HeaderText = "选择";
checkBoxColumn.Width = 50;
dataGridView1.Columns.Add(checkBoxColumn);
?注意?:若需绑定数据源,需确保数据源包含对应布尔字段,否则排序时选中状态会丢失?。
?2. 处理 CheckBox 交互?
?获取选中行数据?
foreach (DataGridViewRow row in dataGridView1.Rows)
{
bool isChecked = Convert.ToBoolean(row.Cells["chkSelect"].Value);
if (isChecked)
{
string id = row.Cells["ID"].Value.ToString(); // 获取其他列数据
}
}
?关键点?:需调用 EndEdit() 提交编辑状态,否则未结束编辑的行无法获取值?。
?全选/取消全选?
// 全选
private void btnSelectAll_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
row.Cells["chkSelect"].Value = true;
}
}
// 取消全选
private void btnCancelAll_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
row.Cells["chkSelect"].Value = false;
}
}
?说明?:通过遍历所有行修改 CheckBox 值?。
?3. 实现单选功能?
若需单选(类似 RadioButton),需在 CellClick 事件中处理:
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["chkSelect"].Index)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
row.Cells["chkSelect"].Value = (row.Index == e.RowIndex);
}
}
}
?逻辑?:点击某行 CheckBox 时,取消其他行的选中状态?。
?4. 绑定数据源时的注意事项?
?数据源需包含布尔字段?:例如 DataTable 中需有 IsSelected 列,否则排序或刷新后选中状态会丢失。
?避免重复添加列?:若已通过代码添加 CheckBox 列,绑定数据源时无需再次添加?3。
?5. 常见问题解决?
?选中状态不保存?:确保 CheckBox 列绑定到数据源的布尔字段,或通过 Tag 属性存储额外数据?。
?跨线程操作?:若需在非 UI 线程更新 DataGridView,使用 Invoke 方法?18。
通过以上方法,可灵活实现 DataGridView 中 CheckBox 的增删改查及交互功能。
查看更多关于C#的winform开发中操作DATAGRIDVIEW中的checkbox实例的详细内容...