2016-08-09 50 views
0

Ich mache eine Anwendung, wo der Benutzer Status für verschiedene Elemente eingeben und beenden und "bearbeiten" kann. Wenn ich den Bearbeitungszustand betrete, möchte ich bestimmte Spalten in einem DataGridView aktivieren und sie beim Beenden deaktivieren. Der folgende Code wird ausgeführt, wenn sich der boolesche Wert EditMode ändert.DataGridView-Spalten können nicht readonly erstellt werden

'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 

Wenn die gesamte Datagridview Readonly-Eigenschaft zu ändern, das Gitter wird editierbar/nicht bearbeitet werden, wie ich es zu erwarten wäre, aber ich mag nur 4/6 Spalten ermöglichen. Die Spaltennamen sind korrekt und die Logik ist die gleiche, aber das Aktivieren der einzelnen Spalten ändert die ReadOnly-Eigenschaft nicht und ich kann die Spalten nicht bearbeiten. Schreiten durch den Debugger, wenn Edit-Modus kann ich sehen, dgv.Columns("colCode").ReadOnly = Not EditMode zu dgv.Columns("colCode").ReadOnly = False bewertet, sondern Schritt Vergangenheit bleibt die Readonly-Eigenschaft wahr ...

Antwort

2

Wenn dgv.ReadOnly = true dann werden die Spalten aller ReadOnly = True sein gezwungen. Setzen Sie also dgv.ReadOnly = False und setzen Sie die ReadOnly-Eigenschaft nur für die Spalten auf True.

+0

Also die Rastereigenschaft überschreibt die einzelne Spalteneigenschaft? Gut zu wissen. – Alex

0

Siehe diese-How to make a specific Column Uneditable In datagridview?

Sie verschiedene Details nur die Spalte über die Einstellung lesen finden.

Sie können eine Spalte nur lesen, bevor Sie die Datenbindung:

this.dgrid.Columns("colName").ReadOnly = true 

Wenn Sie für einzelne Zellen in der Spalte tun müssen, dann werden Sie in einer Schleife haben und sie wie folgt eingestellt:

this.dgridvwMain.Rows(index).Cells("colName").ReadOnly = true 

Dann ist eine andere Möglichkeit, das CellBeginEdit-Ereignis zu behandeln und e.Cancel = True festzulegen, wenn Sie die Zelle deaktivieren müssen.

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 

Referenzen:
How to: Make Columns Read-Only in the Windows Forms DataGridView Control DataGridViewColumn.ReadOnly Property

Sie Readonly-Eigenschaft auf drei Ebenen einstellen. Sie können das gesamte dataGridView oder die gesamte Spalte oder die gesamte Zeile als ReadOnly definieren.

dataGridView1.ReadOnly = true; 

dataGridView1.Rows[index].ReadOnly = true; 

dataGridView1.Columns[index].ReadOnly = true; 

Hinweis:DataGridView.ReadOnly Eigenschaft überschreiben, die Spalte oder Zelle Readonly-Eigenschaft. Setzen Sie zuerst den Wert auf false und ändern Sie dann für eine bestimmte Spalte oder Zelle.