C# 将ReadOnly设置为false,但仍然得到;ReadOnlyException:X列为只读;
我是C#的新手,可能存在类似的问题,但不同。 组件:C# 将ReadOnly设置为false,但仍然得到;ReadOnlyException:X列为只读;,c#,winforms,datagridview,C#,Winforms,Datagridview,我是C#的新手,可能存在类似的问题,但不同。 组件:DataGridView String query= "SELECT * FROM VW_ASSET_LIST "; // SQL View SqlCommand queryCommand= new SqlCommand(query, connection); SqlDataReader resultsSet= queryCommand.ExecuteReader(); DataTable dtAsset = new DataTable(
DataGridView
String query= "SELECT * FROM VW_ASSET_LIST "; // SQL View
SqlCommand queryCommand= new SqlCommand(query, connection);
SqlDataReader resultsSet= queryCommand.ExecuteReader();
DataTable dtAsset = new DataTable();
dtAsset.Load(resultsSet);
dtgMasterAsset.DataSource = dtAsset;
案例:我有一个DataGridView
,它是使用DataSource
从数据库填充的。另一方面,我有一个表单
,用于查看和编辑一行数据。成功更新后,我想直接更改DataGridView
中的行数据-使用以下代码:
int rowIndex= 0;
DataGridViewRow row= dtgMasterAsset.Rows[rowIndex];
row.Cells[1].Value = "NEW ASSET NAME"; // ITEM_NAME
row.Cells[2].Value = "NEW CATEGORY NAME"; // ITEM_CATEGORY_NAME
在此过程中,单元格[1]
已成功更新,但单元格[2]
则未成功更新。将弹出一条错误消息,说明:
列项目\类别\名称为只读
我尝试将设计器中的项目\u类别\u名称
列更改为只读=false
,并添加了一行行。单元格[2]。只读=false代码>
只是为了再次确认
但是错误还是出现了。为什么?
有什么解释吗
多谢各位
仅供参考:所有代码都在同一个类上。首先检查整个
DataGridView
的只读属性是否为false
:
dtgMasterAsset.ReadOnly=false代码>
然后检查使用的列“ReadOnly
”属性是否也为false
。如前所述,您可以检查dtgMasterAsset.ReadOnly
是否为true
但是,你说:
单元格[1]
已成功更新
因此,dtgMasterAsset.ReadOnly
必须为false
。此外,您还表示您已尝试:
此操作失败的唯一方法是,如果行.Cells[2]。只读
被dtgMasterAsset.Columns[2]覆盖。只读
为true
。正如错误所述,问题在于列
尽管你设置了:
ITEM\u CATEGORY\u NAME
列至Readonly=false
我认为在设置row.Cells[2]。Value
之前,应该检查dtgMasterAsset.Columns[2]。ReadOnly
是否为false
,以确保该列确实可写
我的想法是-也许您在designer中的设置是以下一个(或多个):
不是所需的实际列
无效,因为在绑定发生之前不会创建列
重写,因为代码中的某个地方将列重置为只读
刚刚找到罪犯
这就是我如何填充DataGridView
String query= "SELECT * FROM VW_ASSET_LIST "; // SQL View
SqlCommand queryCommand= new SqlCommand(query, connection);
SqlDataReader resultsSet= queryCommand.ExecuteReader();
DataTable dtAsset = new DataTable();
dtAsset.Load(resultsSet);
dtgMasterAsset.DataSource = dtAsset;
不知何故,DataGridView
会阻止系统重新设置/设置从别名SQL查询列()填充的列。要修复它,只需将该列绑定到另一个无别名的列。
其他方式?我不知道:(如果使用SqlDataReader
填充DataGridView
,它将是只读的。
尝试使用SqlDataAdapter
从Datatable(您称之为只读的列)读取数据后,尝试执行以下操作:
dt.Columns[0].ReadOnly = false;
注意:dt它是datatable中的对象,datatable中列的编号为0。我只是再次检查它,dtgMasterAsset.ReadOnly为false且未被覆盖。DataGridView的属性ReadOnly为false,列ReadOnly为FalseToothDataGridViewRow
s也可以是ReadOnly
。很高兴您找到它并共享了,很高兴知道!我不需要将别名列与数据源
绑定结合使用。请在回答中提供一个示例或一些解释。有关更多详细信息,请参阅