数据源为只读-C#

数据源为只读-C#,c#,datagridview,datasource,C#,Datagridview,Datasource,我有一个DataGridView,它的属性是DataSource=datatable()和readonly=falsereadonly必须为false,因为还有其他可以编辑的列。如何使数据源中的所有列都为只读(不可编辑) 代码如下: type = new DataGridViewComboBoxColumn(); table= new DataGridView { Data

我有一个DataGridView,它的属性是
DataSource=datatable()
readonly=false
readonly
必须为false,因为还有其他可以编辑的列。如何使数据源中的所有列都为只读(不可编辑)

代码如下:

type = new DataGridViewComboBoxColumn();
        table= new DataGridView
                         {
                             DataSource = datatable(), // this returns a DataTable object
                             AllowUserToAddRows = false,
                             AllowUserToDeleteRows = false,
                             RowHeadersVisible = false,
                             MultiSelect = false,
                             Name = "AgentTable",
                             AutoSize = true,
                             ReadOnly = false,
                         };
        table.Columns.Add(CreateStartButton());        
        type.Items.Add(" some table");
        type.ReadOnly = false;
        table.Columns.Add(type);
编辑: datagridview将包含4列

  • 第一列,每个单元格都是一个按钮(只读不重要)
  • 第二列,每个单元格都是一个下拉框(只读为false)
  • 第三列和第四列创建为DataTable对象,因此(readonly必须为true)

所以我的问题是如何使第三列和第四列成为只读的?

在创建完所有列之后,应该很容易迭代这些列。我会使用类似的东西,但我称之为伪代码,因为我不知道DataColumn是否是正确的数据类型:

foreach(DataColumn col in table.Columns) {
    col.ReadOnly = true;
}

你的意思是:数据表中的列应该是只读的,而添加的列应该是可编辑的?@GertArnold:请参阅上面的编辑问题好的,如果你永远不打算更改结构,那么也许可以这样更改table.columns[2]和table.columns[3]。否则,在我的foreach循环中添加一个条件,根据要保持只读/可编辑的列名列表测试列名。
col.Table.Columns[4]。ReadOnly=true<代码>正在为对象实例提供未设置的异常对象引用。当表单加载时,列不是只读的。。。。列中的某些单元格为空白,其余单元格已填充。这会是个问题吗?