我正在创建一个用户可以进入和退出的应用程序,并且"编辑"陈述不同的项目。进入编辑状态时,我想在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 ...
答案 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然后更改 对于特定的列或单元格。