Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0320: Enums in DataGridViewColumns

 von 

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Datenbanken und XML
  • Listensteuerelemente

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Enum,DataGridView,Databinding

Der Vorschlag wurde erstellt am: 04.11.2008 10:49.
Die letzte Aktualisierung erfolgte am 11.01.2009 12:35.

Zurück zur Übersicht

Beschreibung  

Man kann den Typ einer Datenspalte im typisierten Dataset auch auf eine Enumeration festlegen (hier: DockStyle).
Dem User möchte man die Enumerations-Werte dann logischeweise in einer Combobox zur Selektion anbieten, die die Mitglieder der Enumeration enthält.
Eigentlich kein Problem, die Enumerations-Mitglieder der ComboColumn als DataSource mitzugeben.
Doch (Bug!) fälschlicherweise wirft das Datagridview für diese Zellen eine FormatException (und hier wird gezeigt, wie man diese ignorieren kann).

Schwierigkeitsgrad

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [19,79 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' --------- Anfang Projektgruppe EnumComboColumn.sln ---------
' -------- Anfang Projektdatei EnumComboColumn.vbproj --------
' ------------ Anfang Datei frmEnumComboColumn.vb ------------
' IDE-Voreinstellungen:
' Option Explicit On
' Option Strict On

' "My Project"-Einstellungen:
' Imports System.Windows.Forms

Public Class frmEnumComboColumn

    Public Sub New()

        InitializeComponent()
        Me.DockComboColumn.DataSource = [Enum].GetValues(GetType(DockStyle))
        Me.DockStyleDataSet.DockStyle.AddDockStyleRow(DockStyle.Top)
        Me.DockStyleDataSet.DockStyle.AddDockStyleRow(DockStyle.Fill)

    End Sub

    Private Sub ControlDataGridView_DataError(ByVal sender As Object, ByVal e As _
        DataGridViewDataErrorEventArgs) Handles ControlDataGridView.DataError

        e.ThrowException = True   ' nicht behandelte Fehler werfen

        With DirectCast(sender, DataGridView)(e.ColumnIndex, e.RowIndex)

            If TypeOf (.OwningColumn) Is DataGridViewComboBoxColumn AndAlso .ValueType.IsEnum Then

                ' Datagridview-Bug: Die Fehler-Meldung "Der Zellwert ist ungültig" ist
                ' schlicht falsch - der Zellwert **ist** gültig. Daher die Exception ohne
                ' weiteres ignorieren.
                e.ThrowException = False
            End If

        End With

    End Sub

End Class

' ------------- Ende Datei frmEnumComboColumn.vb -------------
' --------- Ende Projektdatei EnumComboColumn.vbproj ---------
' ---------- Ende Projektgruppe EnumComboColumn.sln ----------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.