DataGridView.Sort in MixedMode Databinding

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von us4711.

    DataGridView.Sort in MixedMode Databinding

    In DataExpression: Geschachtelter Child-Verweis möglich habe ich erfolgreich den Tipp des @ErfinderDesRades eingesetzt.

    Ja, und nun stelle ich fest, das die Spalte durch Klick auf den Spaltenkopf nicht sortierbar ist:
    Ganz einfach (dachte ich) und implementierte Custom Sorting Using the Icomparer Interface.

    Der Code ist logisch und schön, funktioniert aber nicht, sondern eine Exception teilt mir mit, das ein gebundenes DataGridView nicht nach einer ungebundenen Spalte sortiert werden kann. Nun gut.

    Habe mich dann in den (Un)Tiefen von StackOverflow, Codeproject und MSDN verloren, und weiss jetzt garnix mehr.
    Der Unterton der gelesenen Beiträge scheint anzudeuten, das es möglich ist, aber wie ...
    Was da einer aus dem Forum Hilfe?
    stimmt - könnte man auch machen. Also dass der EreignisCode in eine richtige Datenspalte iwas beliebig ausgerechnetes einträgt.
    Ist datenbänkerisch nicht so schön, denn das ändert den Rowstate auf Changed, auch wenn sich nur in den verwiesenen Datensätzen sich was ändert.
    Und das ist auch nicht ganz einfach, den Spaltenwert immer zuverlässig nachzuführen, auch bei Löschungen und wenn sich der verwiesene Datensatz ändert und sowas.

    Aber auch sehr nützlich, das mal zu coden, weil damit macht man sich mitte Partialen Klassen vertraut, und das ist ja auch ein enorm möchtiges Instrumentarium.
    @VB1963, @ErfinderDesRades
    Vielen Dank für die Hinweise, das funktioniert auch so.
    Aber ich bin mit der Lösung nicht zufrieden, ist mir zu kompliziert. Und wenn etwas kompliziert wird, deutet dies in der Regel auf einen Designfehler hin.
    Die Aufgabenstellung ist ja, im DataGridView die höchste Kombination aus Graduierung und Untergraduierung (Streifen) anzuzeigen.
    Die pragmatische Lösung ist nun, die Tabelle MITGLIEDER um eine Spalte GRADUIERUNG (Int32) zu erweitern.
    Die Detaildaten eines Mitglieds werden in einer separaten Form verwaltet. Bei Beenden dieser Form werden Verweise auf die höchste Graduierung ermittelt und in die Spalte GRADUIERUNG eingetragen (Graduierung * 10 + Untergraduierung). Wegen des maximalen Wertebereichs dieser Parameter ist dies so leicht möglich.
    Im CELLFORMATTING-Event des Mitglieder-Datagridview wird dieser Verweis wieder aufgelöst und als Klartext weitergegeben.
    Der Inhalt der Spalte GRADUIERUNG ist damit so aufgebaut, das er sortierbar ist. Und die angesprochenen datenbänkerischen Unwägbarkeiten werden umgangen.

    Merke: Planung VOR Kodierung ist häufig hilfreich ... aber es gibt ja dieses Forum ;)
    Nochmals vielen Dank für Eure Anregungen.