无法使DataGridView列只读

时间:2016-08-09 04:08:47

标签: vb.net datagridview readonly

我正在创建一个用户可以进入和退出的应用程序,并且"编辑"陈述不同的项目。进入编辑状态时,我想在DataGridView上启用某些列,当它们退出时,禁用它们。当布尔EditMode发生变化时,将运行以下代码。

'Change ReadOnly to Not EditMode
'dgv.ReadOnly = Not EditMode                           'Works
dgv.Columns("colCode").ReadOnly = Not EditMode         'Does not work
dgv.Columns("colText").ReadOnly = Not EditMode         'Does not work
dgv.Columns("colTarget").ReadOnly = Not EditMode       'Does not work
dgv.Columns("colCheck").ReadOnly = Not EditMode        'Does not work

更改整个DataGridView ReadOnly属性时,网格变得可编辑/不可编辑,就像我期望的那样,但我只想启用4/6列。列名是正确的,逻辑是相同的,但单独启用列不会更改ReadOnly属性,我无法编辑列。单步执行调试器,进入编辑模式后,我可以看到dgv.Columns("colCode").ReadOnly = Not EditMode评估为dgv.Columns("colCode").ReadOnly = False,但是单步执行,ReadOnly属性仍为true ...

2 个答案:

答案 0 :(得分:2)

如果dgv.ReadOnly = true,则所有列都被强制为ReadOnly = True。 因此设置dgv.ReadOnly = False并仅将列上的ReadOnly属性设置为true。

答案 1 :(得分:1)

请参阅 - How to make a specific Column Uneditable In datagridview?

您将找到有关将列设置为只读的不同详细信息。

您可以在绑定数据之前将列设为只读:

this.dgrid.Columns("colName").ReadOnly = true

如果您需要对列中的单个单元格执行操作,则必须循环并将其设置为:

this.dgridvwMain.Rows(index).Cells("colName").ReadOnly = true

然后另一种方法是处理CellBeginEdit事件,并在需要禁用单元格时设置e.Cancel = True。

Private Sub DataGridView_CellBeginEdit(sender As System.Object, e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridViewMsg.CellBeginEdit
    If DataGridViewMsg.Rows(e.RowIndex).Cells("disable").Value = "Y" Then
        e.Cancel = True
    End If
End Sub

<强>参考文献:
How to: Make Columns Read-Only in the Windows Forms DataGridView Control DataGridViewColumn.ReadOnly Property

您可以在三个级别设置ReadOnly Property。您可以将整个dataGridView或整个列或整行作为ReadOnly。

dataGridView1.ReadOnly = true;

dataGridView1.Rows[index].ReadOnly = true;

dataGridView1.Columns[index].ReadOnly = true;
  

注意: DataGridView.ReadOnly属性会覆盖列或单元格的ReadOnly属性。首先将其设置为false然后更改   对于特定的列或单元格。