Mit dem folgenden Quelltext bezwecke ich ein Datagridview dessen Spalte (2) eine ComboBox Spalte ist an eine existierende Instanz einer eigenen Klasse Zu binden. Dabei ist:
KDHauptfenster die Inztanz der besagten Klasse
TelNrN eine Eigenschaft dieser Klasse vom Typ ListOf(ClassTelNr)
ClassTelNr ist wiederum eine eigene Klasse die eine Eigenschaft Typ hat der vom Datentyp ein Enum (TelNrTyp) ist.
Die Vorgehensweise benutze ich seit Jahren in etlichen Programmen. Das einzige was hier für mich neu ist, ist die ComboBox Spalte, weswegen ich AutoGenerateColumns = False gesetzt habe und die Spalte jeweils selbst anlege.
Auch die Vorgehensweise einzelne ComboBoxen mit Werten von Enums zu füllen und an Eigenschaften von Klassen zu binden verwende ich so häufig. Im Debugger kann ich auch sehen, dass das CellTemplate Drop sauber mit den Werten befüllt ist.
In diesem Fall hagelt es Zur Laufzeit aber Fehlermeldungen, "Der DataGridViewComboBoxCell-Wert ist Ungültig" - Irgendwas scheint also bei der Bindung nicht zu stimmen. Mit einer Normalen TextBoxSpalte lässt sich übrigens wunderbar binden.
Wo also hat sich der Fehler eingeschlichen?
KDHauptfenster die Inztanz der besagten Klasse
TelNrN eine Eigenschaft dieser Klasse vom Typ ListOf(ClassTelNr)
ClassTelNr ist wiederum eine eigene Klasse die eine Eigenschaft Typ hat der vom Datentyp ein Enum (TelNrTyp) ist.
Die Vorgehensweise benutze ich seit Jahren in etlichen Programmen. Das einzige was hier für mich neu ist, ist die ComboBox Spalte, weswegen ich AutoGenerateColumns = False gesetzt habe und die Spalte jeweils selbst anlege.
Auch die Vorgehensweise einzelne ComboBoxen mit Werten von Enums zu füllen und an Eigenschaften von Klassen zu binden verwende ich so häufig. Im Debugger kann ich auch sehen, dass das CellTemplate Drop sauber mit den Werten befüllt ist.
In diesem Fall hagelt es Zur Laufzeit aber Fehlermeldungen, "Der DataGridViewComboBoxCell-Wert ist Ungültig" - Irgendwas scheint also bei der Bindung nicht zu stimmen. Mit einer Normalen TextBoxSpalte lässt sich übrigens wunderbar binden.
Wo also hat sich der Fehler eingeschlichen?
VB.NET-Quellcode
- Dim Drop As New DataGridViewComboBoxCell()
- Drop.Items.AddRange(System.Enum.GetValues(GetType(TelNrTyp)))
- DataGridViewTelNrN.AutoGenerateColumns = False
- DataGridViewTelNrN.DataSource = KDHauptfenster.TelNrN
- DataGridViewTelNrN.Columns.Add(New DataGridViewTextBoxColumn)
- DataGridViewTelNrN.Columns.Item(0).HeaderText = "ID"
- DataGridViewTelNrN.Columns.Item(0).DataPropertyName = "ID"
- DataGridViewTelNrN.Columns.Item(0).ToolTipText = ""
- DataGridViewTelNrN.Columns.Item(0).Visible = False
- DataGridViewTelNrN.Columns.Add(New DataGridViewTextBoxColumn)
- DataGridViewTelNrN.Columns.Item(1).HeaderText = "KDNr"
- DataGridViewTelNrN.Columns.Item(1).DataPropertyName = "KDNr"
- DataGridViewTelNrN.Columns.Item(1).ToolTipText = "Referenz KdNr"
- DataGridViewTelNrN.Columns.Item(1).Visible = False
- DataGridViewTelNrN.Columns.Add(New DataGridViewComboBoxColumn)
- DataGridViewTelNrN.Columns.Item(2).CellTemplate = Drop
- DataGridViewTelNrN.Columns.Item(2).DataPropertyName = "Typ"
- DataGridViewTelNrN.Columns.Item(2).ToolTipText = "Art des Eintrages"
- DataGridViewTelNrN.Columns.Item(2).HeaderText = "Typ"
- DataGridViewTelNrN.Columns.Item(2).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
- DataGridViewTelNrN.Columns.Item(2).Visible = True
- DataGridViewTelNrN.Columns.Item(2).ReadOnly = False
- DataGridViewTelNrN.Columns.Add(New DataGridViewTextBoxColumn)
- DataGridViewTelNrN.Columns.Item(3).DataPropertyName = "TelNr"
- DataGridViewTelNrN.Columns.Item(3).ToolTipText = "Die Telefonnummer oder E-Mail Adresse"
- DataGridViewTelNrN.Columns.Item(3).HeaderText = "TelNr / E-Mail"
- DataGridViewTelNrN.Columns.Item(3).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 'TelNr E-Mail
- DataGridViewTelNrN.Columns.Item(3).Visible = True
- DataGridViewTelNrN.Columns.Item(3).ReadOnly = False
- ...