有人可以帮助我为什么它不起作用?我有一个 checkbox
,如果我点击它,这应取消选中datagridview中的所有复选框,这些复选框在包括用户选中复选框之前已经过检查 .
这是代码:
private void chkItems_CheckedChanged(object sender, EventArgs e)
{
foreach (DataGridViewRow row in datagridview1.Rows)
{
DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells[1];
if (chk.Selected == true)
{
chk.Selected = false;
}
else
{
chk.Selected = true;
}
}
}
不应选中该复选框 . 应该检查 .
这是添加的列
DataGridViewCheckBoxColumn CheckboxColumn = new DataGridViewCheckBoxColumn();
CheckBox chk = new CheckBox();
CheckboxColumn.Width = 20;
datagridview1.Columns.Add(CheckboxColumn);
14 回答
所有的铸造都会导致错误,这里我没有尝试过任何工作,所以我摆弄了一下并让它发挥作用 .
看看这个MSDN Forum Posting它建议将Cell的值与Cell.TrueValue进行比较 .
因此,通过它的示例,您的代码看起来应该是这样的:(这是完全未经测试的)
编辑:似乎未绑定DataGridViewCheckBox的Cell.TrueValue的默认值为null,您需要在列定义中设置它 .
这段代码是工作说明在构造函数中设置TrueValue和FalseValue以及检查null:
当我看到这篇文章没有真正回答时,我正在制作我自己的Checkbox版本来控制DataGridViewCheckBoxColumn . 要设置DataGridViewCheckBoxCell的已检查状态,请使用:
对于任何试图完成同样事情的人来说,这就是我想出的 .
这使得两个控件的行为类似于Gmail中的复选框列 . 它保留了鼠标和键盘的功能 .
这是你可以尝试的另一个例子
你在这里尝试的代码将翻转复选框的状态(如果为true,则反之亦然),而不管用户选择的复选框,因为这里
foreach
是 selecting 每个checkbox
并执行操作 .为清楚起见,在执行
foreach
操作之前存储 user selected 复选框的index
,在foreach
操作之后,通过提及存储的索引并检查它来调用复选框(在您的情况下,将其设为True
- 我认为) .这只是逻辑,我确定这是正确的 . 如果可能的话,我会尝试实现一些示例代码 .
修改你的
foreach
这样的东西:上面的函数使所有复选框都为true,包括用户选择的CheckBox . 我想这就是你想要的......
简单的代码就可以了
尝试下面应该工作的代码
以下代码是完美的
使用复选框CONTROL选择/取消选中数据网格上的复选框列
您可以在网格CellClick事件上使用此代码来检查或取消选中单元格复选框:
虽然所有其他答案都是正确的,但我会添加另一个对我有用的简单选项:
压缩:
只要
cIndex
指的是DataGridViewCheckBoxCell
类型的单元格,这将正常工作 . 希望这有助于somone .你可以试试这段代码:
我遇到了同样的问题,即使这里提供的解决方案也没有用 . 复选框根本不会改变,它们的值将保持为空 . 我花了很多年才意识到自己的愚蠢:
事实证明,在我调用
form1.Show()
之前,我在Form派生类Form1上调用form1.PopulateDataGridView(my data)
. 当我更改顺序时,首先调用Show()
,然后读取数据并填入复选框,值不会保持为空 .如果在代码中创建单元格,则下面的代码允许用户取消/检查DataGridView中的复选框