Zum Inhalt springen

VB.Net Dataview/DataTable sortieren


Lsteinme

Empfohlene Beiträge

Hallo Leute,

Ich hab ein kleines Problem mit dem Anzeigen meiner Daten im Dataview welcher meinem Datagridview zugrunde liegt.

Und zwar, muss ich für eine Spalte in meiner Dataview, der sich aus einer Datatable speist, eine besondere Sortierprozedur erstellen, da hier mehre Objekttypen zusammenspielen. Wenn die Daten im DGV direkt liegen ist das ja kein Problem, da nimmt man einfach das Hauseigene SortCompare oder Sorted Event und bastelt daran rum.

Wie kann ich aber das ganze dahingehend verändern, das ich auch in einem Dataview eine etwas angepasste Sortierfunktion einbauen kann? Im Internet hab ich zwar immer wieder die schönen Links zur MicrosoftLib gefunden, aber da steht au nur wie man in einem DataView (naiv) nach einer oder mehreren Spalten sortiert und ne Sortorder mit gibt, was für meinen fall halt leider net ausreicht, siehe Szenario

Das Szenario is wie folgt:

in meinem DGV werden Projekte und Teilziele dieser Projekte angezeigt.

wir nun nach dem Namen sortiert sollen zwar die Projekte neu sortiert werden, die Teilziele, die per Default direkt unter den Projekten stehen, aber sollen mit den Projekten mit wandern und somit immer bei ihrem Projekt bleiben.

Mein bisher in der Theorie erfolgsversprechendster Versuch sah dabei wie folgt aus:

ich habe für den Namen aller Einträge in der Datatable eine neue Klasse erstellt. (MyString)

Diese hat die Compare und CompareTO methoden implementiert so wie die ToString methode überschrieben.

Beim erstellen eines neuen MyStrings wurde dann Typ des Eintrags mitgegeben und dem entsprechend 2 Einträge gesetzt, der "shownname" sowie der "identname". Im Falle eines Teilziels wird der identname durch eine Kombination von "Projektname" und "Teilzielname" gebildt.

In den Compare Methoden hab ich dann einfach die StringCompare() Methode angewandt um jeweils die identnamen miteinander zu vergleichen.

Was in der Theorie ganz gut klang, scheint den Dataview beim sortieren aber nicht weiter zu interessieren, augenscheinlich sortiert er weiterhin nur nach dem angezeigten Namen und verwendt nicht die Compare Methoden meiner MyString Klasse.

Gruß lsteinme

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, hab ne Lösung gefunden, auch wenn sie wahrscheinlich unnötig Kompliziert ist und einen anderen Nachteil nachsich zieht:

Ich hab einfach eine neue Spalte in meine DT eingezogen, die einen String mit dem Projektnamen+(falls vorhanden)Teilzielnamen beinhaltet. wenn der Nutzer nun auf die normale Namen spalte klickt, wird nach dieser eignetlich Unsichbaren Spalte sortiert.

Nachteil: dreht man die Sortorder rum, steht das Projekt unter den Teilzielen xD, aber naja, da ich sowieso die automatische Sotierung der Spalten ausschalten musste, hab ich halt einfach die invertierung des Sortbefehls für den Namen nicht eingebaut, mag nicht sehr schön sein, funtkioniert aber.

Falls wem was besseres einfällt, ich bin da für alles Offen^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das klingt doch schonmal viel besser wie meine Notidee^^, aber wenn die die gruppiere, kann ich dann dennoch beide Ordnen? in der Tabelle stehen ja sowohl Projekte als auch Teilziele und BEIDE sollen geordnet sein, dabei aber nicht "zerrissen" werden, also das nachher ein Projekt ganz wo anders in der alphabetischen Ordnung steht als ein Teilziel. Auf jeden Fall werd ich mich mal in dieses Linq einlesen, das scheint ja recht praktisch zu sein.

Herzlichen Dank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

im Anfangs-Post hast du noch von Objekttypen geredet!? Ich bin also davon ausgegangen, dass du Datenklassen verwendest. Wenn du also folgendes hast, sollte es auch mit Linq kein Problem geben ;)

Datenklasse


Public Class Projekt

    Private _CPJNr As String = ""

    Public Property CPJNr As String

        Get

            Return _CPJNr

        End Get

        Set(ByVal value As String)

            _CPJNr = value

        End Set

    End Property


    Private _CPJDatum As String = Mid(Now().ToString, 1, 10)

    Public Property CPJDatum As String

        Get

            Return _CPJDatum

        End Get

        Set(ByVal value As String)

            _CPJDatum = value

        End Set

    End Property

End Class

Nun im Eigentlich Code

    Dim deineListe as new List(of Projekt)

Dann kannste auf "deineListe" mit Linq arbeiten, siehe dazu auch

LINQ in Visual Basic

Gruß Hans-Jörg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast recht, hab zwischenZeitlich auch entdeckt das ich neben der Datatable, die dem DGV zu grunde liegt noch dictionarys habe aus denen sich ja das ganze speist, also geh ich mit LINQ einfach über die drüber. Wobei ich jetzt, zum austesten des ganzen, auf ein hässliches Problem gestoßen bin, was sich aber hoff ich durch bisschen Nachdenken lösen lässt. Die Kurzfassung: es gibt sichtbare und unsichtbare Columns im DGV, deren Sichtbarkeit ist aber nicht statisch sondern der Nutzer kann sich aussuchen welche columns er grad sehn will, was beim (ebenfallsintegrierten) Textfilter evt hässlich wird^^

Aber denk das sollt ich hin bekommen, danke für den Support

Gruß Lucas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...