DGV nach displayMember einer Combobox-Spalte sortieren

  • VB.NET
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    DGV nach displayMember einer Combobox-Spalte sortieren

    Hallo Community.

    Ein typisiertes Dataset hat 2 Tabellen:
    Artikel (Felder: ID, Nummer, Bezeichnung, TypID)
    Artikeltyp (Felder: TypID, TypBezeichnung)

    Der PK (PrimaryKey) des Artikeltyps ist also in der Artikel-Tabelle als FK (ForeignKey) enthalten.

    Die Tabelle Artikel wurde per drag&drop aus dem Dataset auf ein Form gezogen, so dass ein Datagridview daraus entsteht, das auf einer BindingSource basiert. Die Spalte mit der TypID wird von TextFeld in eine Combobox geändert, wobei der displayMember TypBezeichnung ist - also ein sprechender Text und nicht die ID des Typs.
    Sortiert man jetzt nach der Spalte TypBezeichnung im DGV, stimmt die Sortierung nicht, denn eigentlich wird nach dem dieser Spalte zugrundeliegenden TypID (numerischer PK) sortiert und nicht alphabetisch nach der damit verbundenen TypBezeichnung.

    Mit der Konfiguration in BindingSource.sort kann man da nichts machen, da diese ja gar nicht weiß, dass im DGV ein mit der TypID in Verbindung stehender Text (TypBezeichnung) angezeigt wird, die dort noch gar nicht vorliegt.
    Kann man das im DGV mit Bordmitteln des Controls einstellen oder muss ich da beim Klick auf den Spaltenkopf dieser speziellen Spalte reagieren und die Sortierung irgendwie selbst coden? Muss man da noch etwas dazwischenhängen (eine View o.ä.)?

    Vielen Dank im Voraus!
    Michael
    Danke an Euch beide für die Antworten.
    Ich hab's mir fast schon gedacht, dass MS das nicht einfach unterstützt - dabei finde ich das eigentlich keine besondere Anforderung. Wer seine Daten einigermaßen normalisiert und Redundanzen vermeidet, muss statt internen Fremdschlüsseln öfter Werte aus anderen Tabellen in einer Combobox in einem DGV darstellen. Da die DGV's schon die Sortierung "normaler" Felder selbst machen, ist m.M.n. der Weg, dass das Control auch noch nach dem Anzeigefeld einer Combobox sortiert, nicht mehr so weit.
    Aber egal - der Link von VB1963 sieht eigentlich ganz vielversprechend aus. Das Thema ist - jetzt wo es nicht mit Bordmitteln geht - die Kür und nicht die Pflicht...
    Wegen das eine eigene BindingSource-Klasse zu schreiben will gut überlegt sein.
    Der Form-Designer wird nämlich weiterhin die ollen BindingSources generieren - es sei denn, du findest einen Weg, ihm beizubringen, fürderhin deine BS zu generieren.

    Aber stimmt schon - das mit dem Sort ist ein Trauerspiel.
    Weil für die Filter-Property gilt eine Syntax, die auch ParentRows referenzieren kann - dass ein gleiches bei Sort nicht unterstützt wird ... :thumbdown: