vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
IBindingListView 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)?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ...)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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