| |
VB.NET - FortgeschritteneIBindingListView implementieren oder DataView verwenden? | | | Autor: keco | Datum: 14.03.19 10:15 |
| Hallo,
ich hatte vor langer Zeit ein Beispiel für die Implementierung von "IBindingListView" mit einfacher Sortier- und Filterfunktion im Internet gefunden. Allerdings konnte man nur nach einer Spalte sortieren und nach nur einem Kriterium filtern. Jetzt wollte ich die Klasse überarbeiten und die Funktionalität erweitern, vor Allem das Filtern.
Ich habe jetzt eine Reihe von Webseiten, Forenbeiträgen und der MSDN gelesen, so dass ich mir unsicher darüber bin, ob es überhaupt sinnvoll ist diese Klasse zu erweitern. Denn wie es scheint gibt es ja bereits eine Klasse im Framework, die all das kann: DataView.
Mir stellt sich nun die Frage, ob es nicht sinnvoller wäre, wenn ich die Daten aus meiner Liste einfach in eine DataTable überführe und dann an ein DataView übergebe um sie an Steuerelemente wie z.B. DataGridView zu binden.
Ich habe die Funktionalität von DataView noch nicht getestet, aber vielleicht kann mir einer von euch in dem Punkt hier weiterhelfen. Habe ich die Klasse DataView falsch verstanden? Unterstützt diese ein Multi-Column-Sort und beliebiges Filtern? Welchen Sinn hätte es eine eigene Klasse mit IBindingListView zu implementieren (wie z.B. diese hier)? | |
Re: IBindingListView implementieren oder DataView verwenden? | | | Autor: Kuno60 | Datum: 14.03.19 16:58 |
| Hallo,
ich weiß nicht, was die beste Lösung ist, aber ich arbeite gerne mit Arrays und Listen. Doch diese haben den Nachteil, dass die automatische Sortierung über den Spaltenkopf im DataGridView, nicht funktioniert. Für die Sortierung ist die Schnittstelle IBindingList erforderlich. Habe mir deshalb eine Klasse gebastelt, die eine List um diese Schnittstelle erweitert.
Namespace Global.System.Collections.Generic
<Serializable>
Public Class BindList(Of T As {Class, New})
Inherits List(Of T)
Implements IBindingList
Public Sub New()
MyBase.New()
End Sub
Public Sub New(en As IEnumerable(Of T))
MyBase.New(en)
End Sub
'...
End Class
End Namespace Eine DataView speichert nicht selbst Daten, sondern stellt eine Verbindung zu einer DataTable dar. Sie implementiert IBindingListView und hat damit umfangreiche Sortier- und Filterfunktionen.
Wenn man aber LINQ-Abfragen benutzt, braucht man diese Funktionen nicht.
LINQ-Abfragen liefern das Ergebnis als IEnumerable und auch dieses Ergebnis kann man in eine BindList umwandeln:
<Extension, EditorBrowsable>
Public Function ToBindList(Of T As {Class, New})(en As IEnumerable(Of T)) As _
BindList(Of T)
Return New BindList(Of T)(en)
End Function und so kann man es verwenden:
Dim Q = From g In Liste
Where g.Datum.HasValue AndAlso g.Datum.Value.Date < Date.Today)
Order By g.Entfernung, g.Name
Me.InfoBindingSource.DataSource = Q.ToBindList | |
Re: IBindingListView implementieren oder DataView verwenden? | | | Autor: keco | Datum: 14.03.19 17:39 |
| Danke für die Antwort.
Mit LINQ arbeite ich nicht. Das ist zwar ganz praktisch, für mich aber zu schwierig dessen Funktion auf die Schnelle zu verstehen, vor Allem bei komplexen Anweisungen. Daher vermeide ich das größtenteils.
Die DataView würde ich dann auch in Kombination mit der DataTable verwenden, wäre ja kein Problem. Die Daten aus der Datenbank erhalte ich ohnehin als DataTable. Da aber nicht alle Daten aus einer Datenbank kommen nutze ich auch sehr gerne Listen. Die Verwendung ist eben sehr einfach mit .Add oder .Remove etc.
Deswegen bin ich mir einfach unschlüssig darüber, ob es sich lohnt die Klasse zu erweitern (bzw. neu zu erstellen) oder die vorhandenen Klassen zu verwenden. | |
Re: IBindingListView implementieren oder DataView verwenden? | | | Autor: Kuno60 | Datum: 14.03.19 18:56 |
| Ob sich das mit einer eigenen Klasse wirklich lohnt, ist natürlich davon abhängig, wie oft man die gebrauchen kann und wie hoch der Aufwand ist, die Klasse zu erweitern.
Die DataView ist sehr umfangreich, mit etwa 1800 Code-Zeilen. | |
Re: IBindingListView implementieren oder DataView verwenden? | | | Autor: Manfred X | Datum: 14.03.19 20:09 |
| Hallo!
Es gibt im Framework diverse Listen, die verschiedene
Schnittstellen implementieren (z.B. Bindinglist, Observable Collection).
Aber: Warum schreibst Du Deine Daten nicht einfach in eine
Datatable? Listen-Methoden wie Add, Insert, Remove
gibt es dort auch für die Rows-Auflistung. | |
Re: IBindingListView implementieren oder DataView verwenden? | | | Autor: keco | Datum: 16.03.19 17:56 |
| Ich habe bisher immer mit generischen Listen gearbeitet, weil die typisiert sind.
In der DataTable müsste ich die einzelnen Spalten (Eigenschaften) und Zeilen (einzelne Objekte) selbst hinzufügen, was damit jederzeit änderbar wäre. Noch dazu ist eine DataTable nicht typisiert? | |
Re: IBindingListView implementieren oder DataView verwenden? | | | Autor: Manfred X | Datum: 16.03.19 21:02 |
| Auch bei einer generischen Liste werden die
Items als Objekte einzeln hinzugefügt.
Eine Datatable kann durch Definition eines
XML-Schemas typisiert werden.
Es gibt für den typisierten Zugriff auf eine
Zelle in einer untypisierten Table:
Dataextensions.Field(of ...) | |
Re: IBindingListView implementieren oder DataView verwenden? | | | Autor: keco | Datum: 16.03.19 21:11 |
| Ich werde mir das mal anschauen. Danke soweit.
Vielleicht kann ich mich ja mit der DataTable anfreunden. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|