Name:
DatagGidViewEx
Beschreibung:
Die vorgestellte Bibliothek ersetzt System.Windows.Forms.Datagridview mit einem Control, das spaltenbezogene, kumulative Filter-Funktionalität zur Verfügung stellt.
###########################################################
Achtung: Überarbeitete Version in Post #29 (2017-03-28)
###########################################################
Downloads:
US.WindowsEx.FormsEx.ControlsEx.4.2015.0326.15.zip (158,94 kB) (Bugfixes: Farbmanagement, Filterparsing) (Achtung:
Hintergrund:
Das DataGrid-Steuerelement war für VB6 genauso, wie es das .Net DataGridView-Steuerelement heutzutage ist, eine bevorzugte Weise, strukturierte Daten anzuzeigen.
Insbesondere bei RAD-Sprachen wie
Immer jedoch fehlte mir die eingebaute Möglichkeit, das angezeigte Datenvolumen "On-The-Fly" filtern zu können.
Eine solche Funktionalität fand ich dann bei den Controls der Firma ComponentOne zu VB6-Zeiten.
Die Kosten dafür lagen jedoch weit ausser dem mir zur Verfügung stehenden Finanzrahmen, sodass ich anfang "was Eigenes" zu programmieren. Das wurde dann doch ziemlich hart:
Nun aber läuft's nach meinen Anforderungen seit ca. 6 Monaten, und, soweit ich's beurteilen kann, bugfrei.
Funktionalitäten:
Verwendung:
Das Control sollte in einer eigenen Registerkarte des Werkzeugkastens der Entwicklungsumgebung untergebracht werden. Dort erscheinen dann folgende Controls:
Erforderliche Kenntnisse:
Eine gute Kenntnis des
Die Anwendung des DataGridViewEx-Controls ist jedoch ziemlich unkompliziert.
Benutzung der Controls
ToDo
Visual Basic .NET (IDE: VB 2013 professional)
Systemanforderungen:
.NET Framework 4.5 (wegen bestimmter in Reflection verwendeter Features)
Hinweis: DLL ist kompiliert auf AnyCPU asl Release
Systemveränderungen:
Speichert bei
Downloads: (Die aktualisierten Versionen sind am Anfang des Posts)
Musterprojekt:
Test DataGridViewEx.zip (305 kB)
DLL:
US.WindowsEx.FormsEx.ControlsEx.DataGridViewEx.zip (153 kB)
Lizenz/Weitergabe:
CC0
Quellen:
Die Entwicklung dieses Controls dauert nun schon so ziemlich 10 Jahre. Nicht Vollzeit, natürlich nicht, aber immer dann, wenn Bedarf bestand.
Diverse Fachliteratur (Bücher, Zeitschriften, Magazine, Online etc.) zu allen denkbaren Aspekten der Betriebssysteme, Entwicklungsumgebungen, Programmierstilen usw. haben dazu geführt, dass diese Anregungen hier Niederschlag gefunden haben.
Für die Erweiterung meines Wissens danke ich insbesondere (nein, ich erhalte KEINE Werbevergütung):
Edit 2015-03-26:// ToTo ergänzt, ToDo Prioritäten vergeben, ToDo abgearbeitet
DatagGidViewEx
Beschreibung:
Die vorgestellte Bibliothek ersetzt System.Windows.Forms.Datagridview mit einem Control, das spaltenbezogene, kumulative Filter-Funktionalität zur Verfügung stellt.
###########################################################
Achtung: Überarbeitete Version in Post #29 (2017-03-28)
###########################################################
Downloads:
US.WindowsEx.FormsEx.ControlsEx.4.2015.0326.15.zip (158,94 kB) (Bugfixes: Farbmanagement, Filterparsing) (Achtung:
Property BackColor
heisst nun Property BasicColor
)Hintergrund:
Das DataGrid-Steuerelement war für VB6 genauso, wie es das .Net DataGridView-Steuerelement heutzutage ist, eine bevorzugte Weise, strukturierte Daten anzuzeigen.
Insbesondere bei RAD-Sprachen wie
VisualBasic
und C#
können hiermit in kürzester Zeit vollständige Datenverwaltungen (CRUD) erstellt werden.Immer jedoch fehlte mir die eingebaute Möglichkeit, das angezeigte Datenvolumen "On-The-Fly" filtern zu können.
Eine solche Funktionalität fand ich dann bei den Controls der Firma ComponentOne zu VB6-Zeiten.
Die Kosten dafür lagen jedoch weit ausser dem mir zur Verfügung stehenden Finanzrahmen, sodass ich anfang "was Eigenes" zu programmieren. Das wurde dann doch ziemlich hart:
- Entwurf eines erweiterten Datagridview mit passenden Entwurdfzeit-Designern
- Entwurf eigener Datagridviewspalten mit entsprechender Filterfunktionalität
- Entwurf der gewünschten Filterfunktionalität.
- Entwurf eines passenden Column-Editors
- automatische Spaltengenerierung der erweiterten Columns über die angebundene Bindingsource
Nun aber läuft's nach meinen Anforderungen seit ca. 6 Monaten, und, soweit ich's beurteilen kann, bugfrei.
Funktionalitäten:
- DataGridViewEx
Die Filterfunktionalität wird durch eine Mausclick auf die Zelle(-1,-1) erreicht. Wenn Filtern erlaubt ist (Property FilteringEnabled
), wird dort ein Filtersymbol angezeigt.
Neben der eigentlichen Filterfunktionalität sind nach persönlichem Geschmack einige Goodies eingeflossen:
1.1Property AutomaticFiltering
: Legt fest, ob die Anwendung der SpaltenFilter auf die Datenquelle automatisch erfolgen soll.1.2Property :
1.2Property BackColor
: Die Spaltenköpfe sollten in einer Art Button-Stil sein, sodass eine OwnerDraw-Funktion mit Farbverlauf und Blend-Funktionalität her. Die hier angegebene Farbe wird aufgehellt und als Startfarbe des Farbverlaufs verwendet.
1.3Property BasicFilter
: Eine Datenquelle kann ja bereits gefiltert sein, wenn sie dem DataGridView zugeordnet wird. Dieser "Basisfilter" wird hier festgelegt und auf die Datenquell angewendet.
1.4Property FilterBackColor
,Property FilterForeColor
: Farbgebung der in der Filterzeile verwendeten, nicht selektierten Controls.
1.5Property FilterSelectedBackColor
,Property FilterSelectedForeColor
: Farbgebung der in der Filterzeile verwendeten, selektierten Controls.
1.6Property FilterFocusColor
: Es zeigte sich, das insbesondere auf Notebook-Bildschirme das selektierte Filtercontrol schlecht erkennbar ist. Daher wird in dieser Farbe ein "FocusRectangle" um die aktive Filterzelle gezeichnet..
1.7Property Columns
: Diese Property musste überschrieben werden, um einen eigenenDataGridViewExColumnCollectionEditor
implementieren zu können.
1.8Property CurrentColumnFilterText
: Der Filterausdruck, der sich aus den aktuellen Filteranforderungen ergibt.
1.9Property FilteringEnabled
: Freigabe (jedoch noch nicht Anzeige) der Filterzeile. Anzeige des Filtersymbols in Zelle(-1,-1)
1.10Property FilteringEnabled
: Freigabe (jedoch noch nicht Anzeige) der Filterzeile. Anzeige des Filtersymbols in Zelle(-1,-1)
1.11Property GradientBackColorEnd
,Property GradientBackColorEnd
: Die automatisch ausProperty BackColor
generierten Farbverlaufswerte können hier überschrieben werden. Bei erneuter Zuweisung vonProperty BackColor
werden sie jedoch auf die dortigen Werte zurückgesetzt.
1.12Property ShowFilterbar
: Die Anzeige der Filterzeile erfolgt im Normalfall über Mouseclick auf Zelle(-1,-1), kann durch setzen dieser Property aber auch programmgesteueert erfolgen.
1.13Property ShowVerticalScollbar
: Es gibt Scenarien, wo eine Anzeige des vertikalen ScrollBars nicht gewünscht ist. Dies kann hier gesteuert werden.
1.14Public Event FilterColumnTextChanged(ByVal sender As Object, ByVal e As DataGridViewExFiltertextChangedEventArgs)
: Dieses Event wird immer dann ausgelöst, wenn sich in irgendeiner Spalte die Filteranforderung ändert. Die Filteranforderung ist in den Argumenten des Events überschreibbar. Das Event wird nicht nur für die Spalte mit der geänderten Filteranforderung ausgelöst, sondern vielmehr für alle Spalten.
1.15Public Event FilterTextChanged(ByVal sender As Object, ByVal e As DataGridViewExFiltertextChangedEventArgs)
: Dieses Event wird immer dann ausgelöst, wenn aus den Filteranforderungen aller Spalten eine neuer Filter zusammengestellt wurde.
1.16 Eine weitere, von aussen nicht steuerbare Funktionalität:
Wenn dem Benutzer erlaubt wird, die Anordung der Spalten zu ändern, erfolgt das Speichern des aktuellen Status bei Aufruf vonProtected Overrides Sub Dispose(ByVal disposing As Boolean)
- Die Unterstützung für die in einer DataTable vorkommenden Datentypen ist vollständig implementiert. Folgende DataGridViewEx-Columns werden in Abhängigkeit vom Datentyp generiert. und sind über den Column-Collection-Editor erreichbar:
- Boolean: DataGridViewExCheckBoxColumn. Filtermöglichkeit: True, False, Indetermined (alle Datensätze sind dann ausgewählt)
- Byte
Decimal
Int16
Int32
Int64
UInt16
UInt32
UInt64
SByte: DataGridViewExNumericTextBoxColum. Diese Spalte basiert auf der NumericTextBox. Bei der automatischen Generierung der Spalten werden Für Eingabe Minimum und Maximum die dem Zahlentype entsprechenden Werte eingesetzt. Händische Definition als z.B. Hexadezimale Anzeige ist natürlich möglich. - Double, Single werden zu Zeit nicht unterstützt. Hierfür ist eine Anpassung der NumericTextBox erforderlich, die später erfolgen wird.
- Char: DataGridViewExTextBoxColum. Hier wird nur das erste eingegebene Zeichen als Filteranforderung erfasst, das keinen Vergleichsoperator darstellt
- DateTime: DataGridViewExDateTimePickerColum. Hier ist ein DateTimePicker hinterlegt, der DBNULL-Werte als beliebigen Text anzeigen kann, und auch durch Löschen der Eingabe mit <Entf> DBNULL an die Datenquelle zurückgeben kann.
- Guid, String, TimeSpan : DataGridViewExTextBoxColum
- Byte(): DataGridViewExTextImageColum. Hier liegt keine Filterfunktionalität vor.
Losgelöst von Datentypen steht eineDataGridViewExButtonColumn
zur Verfügung, die über den ColumnCollectionEditor zugewiesen werden kann.
Ebenso ist eineDataGridViewExComboBoxColumn
und eineDataGridViewExLinkColumn
verfügbar - Alle Filtereingaben werden im Sinne von
[Spalte] LIKE '*FilterTerm*'
(also so eine ArtContains
) verwendet.
Entprechen die ersten eingegebenen Zeichen einem der Vergleichsoperatoren:
<>
,>
,<
,>=
,<=
,=
dann wird die folgende Eingabe interpretiert als:[Spalte] [Operand] 'FilterTerm'
Verwendung:
Das Control sollte in einer eigenen Registerkarte des Werkzeugkastens der Entwicklungsumgebung untergebracht werden. Dort erscheinen dann folgende Controls:
- DataGridViewEx
- DateTimePickerEx (kann auch selbstständig verwendet werden)
- NumericTextBoxEx (kann auch selbstständig verwendet werden)
Erforderliche Kenntnisse:
Eine gute Kenntnis des
DataGridView
und des System.Windows.Forms
-Namespaces ist hilfreich bei der Anwenung der Controls in dieser Bibliothek.Die Anwendung des DataGridViewEx-Controls ist jedoch ziemlich unkompliziert.
Benutzung der Controls
DataGridViewEx
aus Werkzeugkasten auf eine Form ziehen. Tabelle aus dem Register Datenquellen
der Entwicklungsumgebung auf das DataGridviewEx ziehenToDo
- NumericTextBox zur Verwaltung der Datentypen Double und Single anpassen (Priorität 2)
- DatGridViewEnumComboBoxColumn: Verwendung von Enumerationen als Datenquelle einer DataGridViewComboboxColumn (Priorität 1)
Farbmanagement überarbeiten (Priorität 3)Parsen des Filterausdrucks überarbeiten (Priorität 0)- Tab-Verhalten innerhalb der Filter-Zeile (Priorität 2)
Visual Basic .NET (IDE: VB 2013 professional)
Systemanforderungen:
.NET Framework 4.5 (wegen bestimmter in Reflection verwendeter Features)
Hinweis: DLL ist kompiliert auf AnyCPU asl Release
Systemveränderungen:
Speichert bei
Neuanordnung von Spalten aktivieren
bei Dispose
den aktuellen Spaltenstatus am Speicherort der Projekteinstellungen.Downloads: (Die aktualisierten Versionen sind am Anfang des Posts)
Musterprojekt:
Test DataGridViewEx.zip (305 kB)
DLL:
US.WindowsEx.FormsEx.ControlsEx.DataGridViewEx.zip (153 kB)
Lizenz/Weitergabe:
CC0
Quellen:
Die Entwicklung dieses Controls dauert nun schon so ziemlich 10 Jahre. Nicht Vollzeit, natürlich nicht, aber immer dann, wenn Bedarf bestand.
Diverse Fachliteratur (Bücher, Zeitschriften, Magazine, Online etc.) zu allen denkbaren Aspekten der Betriebssysteme, Entwicklungsumgebungen, Programmierstilen usw. haben dazu geführt, dass diese Anregungen hier Niederschlag gefunden haben.
Für die Erweiterung meines Wissens danke ich insbesondere (nein, ich erhalte KEINE Werbevergütung):
- Microsoft, Inc.
- Kofler, Michael
- vb-paradise
- und viele, vile PM mit engaierten Nutzern ganz vieler Foren.
Edit 2015-03-26:// ToTo ergänzt, ToDo Prioritäten vergeben, ToDo abgearbeitet
Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „us4711“ ()