无法将 DataGridView 列设置为只读

Unable to make DataGridView Columns readonly

我正在制作一个应用程序,用户可以在其中进入和退出以及 "edit" 不同项目的状态。进入编辑状态时,我想在 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 属性 时,网格变得 editable/not 可编辑,正如我所期望的那样,但我只想启用 4/6 列。列名正确,逻辑相同,但单独启用列不会更改 ReadOnly 属性,我无法编辑列。通过调试器,当进入编辑模式时,我可以看到 dgv.Columns("colCode").ReadOnly = Not EditMode 评估为 dgv.Columns("colCode").ReadOnly = False 但步过后,ReadOnly 属性 保持为真...

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

参考这个 - 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 属性。您可以将整个 dataGridView 或整列或整行设置为只读。

dataGridView1.ReadOnly = true;

dataGridView1.Rows[index].ReadOnly = true;

dataGridView1.Columns[index].ReadOnly = true;

Note: DataGridView.ReadOnly property override the column or cell's ReadOnly property. First set the it to false and then change for specific column or cell.