Datagrid意外地显示了readonly单元格的文本框

时间:2017-11-10 12:29:50

标签: c# asp.net datagridview

我在14年前的一个asp.net项目中添加了新的webforms。最初开发于VS2003,.NetFramework 1.1。我已经将该项目改编为VS2017,.NetFramework 4.5并且一切正常,除了我想要摆脱的这个小错误。

Screen capture

我有一个在两个页面上完美运行的datagridview,但我刚刚添加的第三个,表现不同。点击"编辑" (按钮[01-02] ...)当行处于编辑模式时,我点击不同行上的编辑按钮,datagridview应该只刷新而不做任何事情,我能够继续编辑字段但是现在datagridview刷新并在只读字段中给我一个文本框。再次单击[01-02]按钮时,我仍然可以继续编辑数据并保存成功。

我确保使用的数据集将此列设置为只读。 datagridview将此列设置为只读。

此行为在我更改了data-worker-layer-class之后开始,并通过将数据集复制到临时数据集来更改数据从数据库填充的方式,该临时数据集已调整为要呈现给用户的数据并返回该临时数据集到webform的代码隐藏。我已将sum列设置为只读。

我对我正在使用的这个旧网站了解的一些事情:

  • 网页表格中的控件不包含在PlaceHolder中,因为它在VS2003中很麻烦
  • 将焦点设置为第一个输入字段的一些RegisterStartupScripts已经过时,但它们仍可用于其他页面,但我已在此新网页中修复了此问题
  • 调整事件处理程序on_click,使用一个按钮开始编辑和保存数据,如果用户点击数据网格中的另一行,则不会发生任何事情。

我真的想避免创建新的解决方案并重新编码......

1 个答案:

答案 0 :(得分:0)

解决。首先我使用的网格是DataGrid(.net 1.1)而不是DataGridView。抱歉,混合。

数据绑定后我做了这个:

private void fillTheDataGrid()
{
     DataSet dsData = this.getDataForMyGrid(...); //fetches data from the data-worker-class
     dgMyGrid.DataSource = dsData;
     dgMyGrid.DataBind();
     ((BoundColumn)dgMyGrid.Columns[10]).ReadOnly = true; // (Added this and it worked)
}