C# 无法选中DataGridViewCheckBoxColumn中的复选框?

C# 无法选中DataGridViewCheckBoxColumn中的复选框?,c#,winforms,datagridview,C#,Winforms,Datagridview,我正在创建一个简单的DataGridView,其中包含一个复选框列和一个文本列(后面会有更多列,但这是我尝试使用的最小工作示例)。当我运行此代码时,会出现复选框列,但我无法选中这些复选框 DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn(); checkColumn.ThreeState = false; checkColumn.Width = 20; MyDataGridView.Columns.A

我正在创建一个简单的
DataGridView
,其中包含一个复选框列和一个文本列(后面会有更多列,但这是我尝试使用的最小工作示例)。当我运行此代码时,会出现复选框列,但我无法选中这些复选框

DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
checkColumn.ThreeState = false;
checkColumn.Width = 20;

MyDataGridView.Columns.Add(checkColumn);
MyDataGridView.Columns.Add(new DataGridViewTextBoxColumn());
由于本例中没有显示任何内容,因此我想添加一些虚拟数据

for (int i = 0; i < 10; i++)
{
    MyDataGridView.Rows.Add(new Object[] { true, "test"});
}
for(int i=0;i<10;i++)
{
添加(新对象[]{true,“test”});
}
通常情况下,
DataGridView
由自定义对象列表中绑定的数据填充,如中所示,但我认为最好在继续之前以基本方式完成此操作


我不是试图以编程方式设置选中状态,而是让用户选择,然后在各种其他事件处理程序中使用该选择

代码似乎很好,所以我可以告诉您检查并确保以下
DataGridView
属性设置正确:
ReadOnly
设置为
False
Enabled
设置为
True
当您使用对象填充
DataGridView
时,也会发生这种情况,具有
公共布尔属性
(DataGridView中的
复选框
)且具有
私有集的。
DataGridView
中表示此(只读)属性的列将自动只读,因为不允许在外部设置属性(=对象代码的外侧)

公共类ExampleObject
{
/// 
///只能读取的公共属性。
///使用此对象填充DataGridViewRow时,表示此布尔属性的列将自动为只读。
/// 
公共布尔值已通过
{
得到;
私人设置;
}
}

只需更改DataGridView的只读属性

     MyDataGridView.ReadOnly = false; 

我在不同的情况下也有同样的问题 我的DataGridView绑定到一个由SqlDataReader(只读)填充的DataTable。我用SqlDataAdapter替换了SqlDataReader,效果很好

DataTable dt=new DataTable();
SqlDataAdapter da=new SqlDataAdapter("Select <column_names> from <table_name>",con);
da.Fill(dt);
DataTable dt=newdatatable();
SqlDataAdapter da=新的SqlDataAdapter(“从中选择”,con);
da.填充(dt);

即使复选框列不是只读的,表格本身也可能被设置为只读。表格设置将覆盖列设置。

我也有同样的问题,解决方法是更改

“编辑模式”从“编辑编程”改为默认的 “EditOnKeystrokeOrF2”

这解决了我的问题

上述建议均已落实

问候
Heider

您是否在DataGridView上设置了其他属性?我刚刚试着运行这段代码,复选框显示为选中状态,可以像往常一样使用鼠标清除。也许您已经禁用了代码中其他地方的编辑功能。在新的WinForms应用程序中,此代码可以在开箱即用的情况下运行,因此问题一定在上下文中的某个地方。请提供更多信息/代码。请将代码发布到创建DataGridView和CheckBox列的
designer.cs
文件中,以便我们告诉您出了什么问题。Ta@JeremyThompson过几天我回到办公室后,我会把代码发出去;我的示例中缺少了一些代码,因为它的一部分仍然保留在设计器中。
ReadOnly
属性就是问题所在。这是很久以前发生在我身上的。。不知何故,我在designer中更改了该属性,结果是在发现密钥之前浪费了大量时间。同样的事情现在也发生在我身上。我也帮了大忙。我换了这个房子,现在遇到了太多的问题,浪费了很多时间
DataTable dt=new DataTable();
SqlDataAdapter da=new SqlDataAdapter("Select <column_names> from <table_name>",con);
da.Fill(dt);