无法将 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.
我正在制作一个应用程序,用户可以在其中进入和退出以及 "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.