C# 未检查DataGridViewCheckBoxCell

C# 未检查DataGridViewCheckBoxCell,c#,winforms,datagridview,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; 它没有被检查的

未检查DataGridViewCheckBoxCell。我已经像这样插入了第一列

DataGridView1.Columns.Insert(0, new DataGridViewCheckBoxColumn { Name = "Print" });
这不起作用

DataGridView1.Rows[0].Cells[0].Value = true;
这两者都不起作用

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

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

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

DataGridView1.Rows[0].Cells[0].Value = true;
检查了第一行。第二行不起作用,因为对
cell.TrueValue
没有意义,并且单元格的属性不是复选框的常数


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

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

dataGridView1.Rows[0].SetValues(true);
这将仅检查第一项。如果要为更多单元格设置值,只需使用更多参数即可

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

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

我自己也遇到了问题。我使用了下面的代码,但我不明白为什么它总是不能正常工作

(请注意,我的代码是用VB编写的,但我认为同样的概念也适用于其他.NET语言)

然后我意识到这是因为细胞的潜在价值在失去焦点之前是不会改变的。我认为DGV总是这样,但很容易忘记

我的解决方案是在click事件处理程序上简单地向数据网格视图添加一点代码。当用户单击复选框时,它所做的只是将焦点转移到其他位置。我把注意力转移到标签上,这样就不会产生任何意外的后果。(例如:如果将其移动到某个按钮,当用户按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单元在计时器启动之前不必失去焦点。

您的datagridview
编辑模式是否设置为
编程编辑

我遇到了相同的问题,因此我将datagridview
编辑模式
属性更改为
按Enter键编辑
。现在对我来说很好

请将datagridview
编辑模式设置为
按Enter键编辑

如果要使其他(非复选框)列
只读
请使用
DataDridView1.Column(“此处的列名或索引”).Readonly=True
使其只读


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

如果您只想添加新的
复选框
列,并且想
选中
`取消选中列中的
复选框,您需要为您的
复选框列添加
TrueValue
FalseValue
。转到“编辑列”对话框,为列设置TrueValue和FalseValue属性。

谢谢。

应该勾选复选框,它工作正常!如果DataGridView有复选框、文本,然后是复选框列,会发生什么?您是否必须以正确的顺序创建一个具有相应值(
bool
string
bool
)的对象数组,并将其传递给
SetValues()
?@sab669我不知道,为什么不试试?
Private Sub DataGridView1_CellContentClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
     Label1.Focus()
End Sub