DataGridViewCheckBoxCell is not getting checked
本文关键字:checked getting not is DataGridViewCheckBoxCell | 更新日期: 2023-09-27 18:30:30
DataGridViewCheckBoxCell未被选中。 我像这样插入了第一列
DataGridView1.Columns.Insert(0, new DataGridViewCheckBoxColumn { Name = "Print" });
这是行不通的
DataGridView1.Rows[0].Cells[0].Value = true;
这都不起作用
DataGridView1.Rows[0].Cells[0].Value = cell.TrueValue;
它没有得到检查的原因可能是什么?
我自己也有这个问题。我正在使用以下代码,但我无法弄清楚为什么它不能一直正常工作。
(请注意,我的代码是VB格式的,但我认为相同的概念也适用于其他.NET语言)
Dim check As DataGridViewCheckBoxCell = DataGridView1.Rows(i).Cells("columnNameHere")
If check.Value = check.TrueValue Then
'do stuff
End If
然后我意识到这是因为单元格的基本值在失去焦点之前不会改变。我认为DGV总是这样,但很容易忘记。
我的解决方案是简单地在单击事件处理程序上向数据网格视图添加一些代码。当用户单击该复选框时,它所做的只是将焦点转移到其他地方。我将焦点转移到标签上,这样它就不会产生任何意想不到的后果。(例如:如果将其移动到按钮,则当用户按 Enter 并激活随机按钮时,用户可能会感到惊讶。 根据 DGV 中的其他内容,您可能需要检查事件的列索引,以便仅对复选框列执行此操作。无论如何,我的 DGV 中的所有其他列都只能读取,所以在我的情况下这无关紧要。
Private Sub DataGridView1_CellContentClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
Label1.Focus()
End Sub
如果有问题的代码包含在按钮中,则焦点已经从DGV转移到按钮,因此这不是问题。就我而言,代码是由计时器激活的 - 这意味着在计时器触发之前,有问题的 DGV 单元不会必然失去焦点。
为什么它不适合您,但您可以尝试以下方法。
dataGridView1.Rows[0].SetValues(true);
这只会检查第一项。当您想为更多单元格设置值时,只需使用更多参数即可。
var values = new bool[] { true, false, true };
dataGridView1.Rows[0].SetValues(values);
这将检查第一个和第三个单元格,但第二个单元格将保持未选中状态。
你的第一行代码实际上对我有用:
DataGridView1.Rows[0].Cells[0].Value = true;
检查了第一行。第二行不起作用,因为没有要cell.TrueValue
的意义,并且单元格的属性 TrueValue 不是选中复选框的常量
让我补充一点,您处理 DataGridView 属性的方式不是很安全,可能会导致异常
您的数据网格视图Edit Mode
属性是否设置为 Edit Programmatically
?
我遇到了同样的问题,所以我将我的数据网格视图Edit Mode
属性更改为Edit on Enter
。现在它对我来说工作正常。
请将您的数据网格视图Edit Mode
设置为 Edit on Enter
。
如果要将其他(非复选框)列设为只读read only
请使用DataDridView1.Column("Column Name Here Or Index").Readonly = True
将其设为只读。
抱歉迟到了,但其他搜索者可以从这个答案中获得一些帮助。
如果您只想添加新的checkbox
列并想check
"取消选中checkboxes in column you need to add
TrueValue and
FalseValue for your
CheckBoxColumn"。转到"编辑列"对话框,为列设置"真值"和"假值"属性。谢谢。