19

我正在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"});
}

通常,DataGridView它填充了从自定义对象列表绑定的数据,就像我的这个问题一样,但我认为在继续之前以基本方式让它工作会更好。

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

4

6 回答 6

38

代码似乎没问题,所以我只能告诉您检查并确保DataGridView正确设置了以下属性:ReadOnly设置为FalseEnabled设置为True

于 2012-06-30T09:38:36.503 回答
8

我有同样的问题,我的解决方案是改变

“EditMode”从“EditProgramatically”变成默认的“EditOnKeystrokeOrF2”,

这解决了我的问题。

以上所有建议均已落实。

亲切的问候海德

于 2016-07-08T08:18:48.903 回答
6

只需更改 DataGridView 的只读属性

     MyDataGridView.ReadOnly = false; 
于 2013-09-29T23:27:31.810 回答
3

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

于 2015-09-03T19:25:45.127 回答
1

当您使用具有(在 DataGridView 中)具有terDataGridView的对象填充 时,也会发生这种情况。中表示此(只读)属性的列自动为只读,因为它不允许在外部设置属性(=在对象的代码之外)。public Boolean propertyCheckBoxprivate setDataGridView

public class ExampleObject
{
    /// <summary>
    /// A public property that can only be read.
    /// When a DataGridViewRow is populated with this object, the column representing this Boolean property is automatically read-only.
    /// </summary>
    public Boolean QCPassed
    {
        get;
        private set;
    }
}
于 2013-07-23T06:02:52.247 回答
1

在不同的情况下我也有同样的问题我的 DataGridView 绑定到一个由 SqlDataReader 填充的 DataTable(它是只读的)。我用 SqlDataAdapter 替换了 SqlDataReader 工作正常。

DataTable dt=new DataTable();
SqlDataAdapter da=new SqlDataAdapter("Select <column_names> from <table_name>",con);
da.Fill(dt);
于 2013-10-15T10:17:21.953 回答