Vb.net 无法使DataGridView列为只读

Vb.net 无法使DataGridView列为只读,vb.net,datagridview,readonly,Vb.net,Datagridview,Readonly,我正在做一个应用程序,用户可以进入和退出和“编辑”不同项目的状态。当进入编辑状态时,我想在DataGridView上启用某些列,当它们退出时,禁用它们。当布尔值EditMode更改时,将运行下面的代码 'Change ReadOnly to Not EditMode 'dgv.ReadOnly = Not EditMode 'Works dgv.Columns("colCode").ReadOnly = Not EditMode

我正在做一个应用程序,用户可以进入和退出和“编辑”不同项目的状态。当进入编辑状态时,我想在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…

如果
dgv.ReadOnly=true
则所有列都强制为
ReadOnly=true

因此,设置
dgv.ReadOnly=False
并将列上的ReadOnly属性设置为true。

如果
dgv.ReadOnly=true
则所有列都被强制设置为
ReadOnly=true

因此,设置
dgv.ReadOnly=False
并将列上的ReadOnly属性设置为true。

请参阅此-

您将发现有关将列设置为只读的不同详细信息

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

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
参考文献:

您可以在三个级别设置ReadOnly属性。您可以将整个dataGridView或整个列或整行设置为只读

dataGridView1.ReadOnly = true;

dataGridView1.Rows[index].ReadOnly = true;

dataGridView1.Columns[index].ReadOnly = true;
注意:属性覆盖列或单元格的只读属性。首先将其设置为false,然后更改 用于特定列或单元格


请参阅此-

您将发现有关将列设置为只读的不同详细信息

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

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
参考文献:

您可以在三个级别设置ReadOnly属性。您可以将整个dataGridView或整个列或整行设置为只读

dataGridView1.ReadOnly = true;

dataGridView1.Rows[index].ReadOnly = true;

dataGridView1.Columns[index].ReadOnly = true;
注意:属性覆盖列或单元格的只读属性。首先将其设置为false,然后更改 用于特定列或单元格


所以网格属性会覆盖单个列属性?知道这一点很好。那么网格属性会覆盖单个列属性吗?很高兴知道。