DataGridViewCheckBoxCell没有被检查。我插入了这样的第一列
DataGridView1.Columns.Insert(0, new DataGridViewCheckBoxColumn { Name = "Print" });这不管用
DataGridView1.Rows[0].Cells[0].Value = true;这两种方法都没有用
DataGridView1.Rows[0].Cells[0].Value = cell.TrueValue;它不被检查的原因是什么?
发布于 2013-09-08 06:44:32
我不知道它为什么不适用于您,但是您可以尝试使用下面的方法。
dataGridView1.Rows[0].SetValues(true);这将只检查第一项。当您想为更多的单元格设置值时,只需使用更多的参数即可。
var values = new bool[] { true, false, true };
dataGridView1.Rows[0].SetValues(values);这将检查第一个单元格和第三个单元格,但第二个单元格将保持不受检查。
发布于 2014-02-27 21:29:20
我自己也对此有意见。我在使用下面的代码,我不知道为什么它总是不能正常工作。
(请注意,我的代码是用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单元不会不可避免地失去焦点。
发布于 2013-09-08 06:35:26
您的第一行代码实际上适用于我:
DataGridView1.Rows[0].Cells[0].Value = true;检查了第一行。第二行不工作,因为对cell.TrueValue没有任何意义,而且单元格的属性TrueValue不是复选框的const
让我补充一点,您处理DataGridView属性的方式不太安全,可能导致异常
https://stackoverflow.com/questions/18681092
复制相似问题