2016-08-09 4 views
0

Я создаю приложение, в котором пользователь может вводить и выходить и «редактировать» состояние для разных элементов. При входе в состояние редактирования я хочу включить определенные столбцы в DataGridView и когда они выйдут, отключите их. Код ниже запускается при изменении Boolean EditMode.Невозможно сделать столбцы DataGridView readonly

'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 свойство сохраняется ...

ответ

2

Если dgv.ReadOnly = true то столбцы все вынуждены быть ReadOnly = True. Итак, установите dgv.ReadOnly = False и установите для свойства ReadOnly только столбцы в значение true.

+0

Значит, свойство сетки переопределяет свойство отдельного столбца? Хорошо знать. – Alex

0

См этот - 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 и затем измените значение для определенного столбца или ячейки.

Смежные вопросы