【问题标题】:Unable to make DataGridView Columns readonly无法将 DataGridView 列设为只读
【发布时间】:2023-04-03 02:46:01
【问题描述】:

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

【问题讨论】:

    标签: vb.net datagridview readonly


    【解决方案1】:

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

    【讨论】:

    • 那么网格属性会覆盖单个列属性吗?好消息。
    【解决方案2】:

    参考这个 - 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 或整列或整行设为 ReadOnly 。

    dataGridView1.ReadOnly = true;
    
    dataGridView1.Rows[index].ReadOnly = true;
    
    dataGridView1.Columns[index].ReadOnly = true;
    

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

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 2015-03-05
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 2016-10-27
      相关资源
      最近更新 更多