如何在DataGridView C#中单独检查多个复选框

时间:2019-07-17 16:37:22

标签: c# checkbox datagridview

我想如何实现这一目标,我尝试了在SO上找到的许多解决方案,但没有一个起作用

enter image description here

例如,我希望能够检查第一个和第二个选项,但是当我检查其中一个而其他两个未选中时,如何避免这种情况呢?

我想知道需要更改哪些事件或属性才能单独选择多个复选框,而无需使用主复选框来选择所有这些事件或属性,希望您能为我提供帮助。

我在datagridview的CellClick事件中尝试了这段代码

var isChecked = (bool)DGVProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

if (isChecked)
{
    foreach (DataGridViewRow row in DGVProductos.Rows)
    {
        if (row.Index != e.RowIndex)
        {
            row.Cells["CheckProducto"].Value = !isChecked;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

我不确定您的foreach循环试图完成什么,但是它取消了所有其他未选中的框的选择。如果您希望将各个框分别选中并保持选中状态,请删除foreach循环。

答案 1 :(得分:0)

目前尚不清楚您要实现的目标,编写的代码与所描述的完全相反,只需删除该代码,您就可以检查单个单元格。

尽管如果您试图将该列用作选择指示符,因此该列未绑定到任何属性,请注意,这是不可能的,因为该列未绑定到检查1个行单元的对象将自动检查所有行,反之亦然。

侧面说明:无论您想实现什么,都应该在CellContentClick事件而不是CellClick上调用用户选中/取消选中复选框时需要运行的代码事件。

答案 2 :(得分:-1)

我找到了解决方案,希望将此处的代码供其他遇到相同问题的人参考

private void DGVProductos_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 0)
    {
        if ((bool)DGVProductos.SelectedRows[e.ColumnIndex].Cells["CheckProducto"].Value == false)
        {
            DGVProductos.SelectedRows[e.ColumnIndex].Cells["CheckProducto"].Value = true;
        }
        else
        {
            DGVProductos.SelectedRows[e.ColumnIndex].Cells["CheckProducto"].Value = false;
        }
    }    
}

通过这种方式,我可以像问题一样单独检查多个复选框,不确定是否是最好的方法,但这对我有用