2

DataGridViewCheckBoxCell 没有得到检查。我已经像这样插入了第一列

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

这是行不通的

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

这都不起作用

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

它没有得到检查的原因可能是什么?

4

5 回答 5

3

我自己也有这个问题。我正在使用以下代码,但我无法弄清楚为什么它一直无法正常工作。

(请注意,我的代码是用 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 单元在定时器触发之前不会失去焦点。

于 2014-02-27T21:29:20.697 回答
1

您的第一行代码实际上对我有用:

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

检查了第一行。第二行不起作用,因为 没有意义cell.TrueValue,并且单元格的属性TrueValue不是选中复选框的 const

让我补充一点,您处理 DataGridView 属性的方式不是很安全,可能会导致异常

于 2013-09-08T06:35:26.370 回答
1

我不知道为什么它对您不起作用,但是您可以尝试以下方法。

dataGridView1.Rows[0].SetValues(true);

这只会检查第一项。当您想为更多单元格设置值时,只需使用更多参数即可。

var values = new bool[] { true, false, true };
dataGridView1.Rows[0].SetValues(values);

这将检查第一个和第三个单元格,但第二个单元格将保持未选中状态。

于 2013-09-08T06:44:32.857 回答
1

您的 datagridviewEdit Mode属性是否设置为Edit Programmatically

我遇到了同样的问题,所以我将 datagridviewEdit Mode属性更改为Edit on Enter. 现在它对我来说很好。

请将您的数据网格视图设置Edit ModeEdit on Enter.

如果您想将其他(非复选框)列read only设置DataDridView1.Column("Column Name Here Or Index").Readonly = True为只读。

抱歉迟到了,但其他搜索者可以从这个答案中获得一些帮助。

于 2015-01-03T18:08:43.880 回答
1

如果您只想添加新checkbox列并想要check“取消选中checkboxes in column you need to addTrueValue andFalseValue for yourCheckBoxColumn”。转到“编辑列”对话框并为您的列设置 TrueValue 和 FalseValue 属性。谢谢。

于 2015-10-29T13:56:58.690 回答