DataGridViewCheckBoxCell未被检查

时间:2013-09-08 06:27:55

标签: c# winforms datagridview

未检查DataGridViewCheckBoxCell。我已按此插入第一列

DataGridView1.Columns.Insert(0, new DataGridViewCheckBoxColumn { Name = "Print" });

这不起作用

DataGridView1.Rows[0].Cells[0].Value = true;

这两项都没有效果

DataGridView1.Rows[0].Cells[0].Value = cell.TrueValue;

可能是因为没有被检查的原因是什么?

5 个答案:

答案 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属性。 感谢。