未检查DataGridViewCheckBoxCell。我已按此插入第一列
DataGridView1.Columns.Insert(0, new DataGridViewCheckBoxColumn { Name = "Print" });
这不起作用
DataGridView1.Rows[0].Cells[0].Value = true;
这两项都没有效果
DataGridView1.Rows[0].Cells[0].Value = cell.TrueValue;
可能是因为没有被检查的原因是什么?
答案 0 :(得分:2)
我自己也有这个问题。我使用下面的代码,我无法弄清楚为什么它一直没有正常工作。
(请注意,我的代码是在VB中,但我认为相同的概念适用于其他.NET语言)
Dim check As DataGridViewCheckBoxCell = DataGridView1.Rows(i).Cells("columnNameHere")
If check.Value = check.TrueValue Then
'do stuff
End If
然后我意识到这是因为细胞的基础值在失去焦点之前不会改变。我认为DGV总是这样,但很容易忘记。
我的解决方案是简单地在click事件处理程序的数据网格视图中添加一些代码。当用户单击复选框时,它所做的就是将焦点转移到其他位置。我将焦点转移到标签上,这样它就不会产生任何意想不到的后果。 (例如:如果将其移动到按钮,用户可能会在按下回车并激活随机按钮时感到惊讶。)根据您的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单元在定时器触发之前不会失去焦点。
答案 1 :(得分:1)
你的第一行代码实际上对我有用:
DataGridView1.Rows[0].Cells[0].Value = true;
检查了第一行。第二行不起作用,因为cell.TrueValue
没有意义,并且单元格的属性TrueValue不是已选中复选框的常量
让我再说一下,解决DataGridView属性的方式不是很安全,可能会导致异常
答案 2 :(得分:1)
我不知道为什么它不适合您,但您可以尝试使用以下方法。
dataGridView1.Rows[0].SetValues(true);
这只会检查第一项。如果要为更多单元格设置值,只需使用更多参数。
var values = new bool[] { true, false, true };
dataGridView1.Rows[0].SetValues(values);
这将检查第一个和第三个单元格,但第二个单元格将保持未选中状态。
答案 3 :(得分:1)
您的datagridview Edit Mode
属性是否设置为Edit Programmatically
?
我遇到了同样的问题,所以我将datagridview Edit Mode
属性更改为Edit on Enter
。现在它对我来说很好。
请将您的datagridview Edit Mode
设置为Edit on Enter
。
如果您想制作其他(非复选框)列read only
,请使用DataDridView1.Column("Column Name Here Or Index").Readonly = True
将其设为只读。
抱歉迟到了,但其他搜索者可以从这个答案中得到一些帮助。
答案 4 :(得分:1)
如果您只想添加新的checkbox
列,并希望check
`取消选中checkboxes in column you need to add
TrueValue and
FalseValue for your
CheckBoxColumn`。转到“编辑列”对话框,为列设置TrueValue和FalseValue属性。
感谢。