Daten aus DataTAble mit Beziehung (Parent - Child) sortieren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von tragl.

    Daten aus DataTAble mit Beziehung (Parent - Child) sortieren

    Hallo
    In meinem Bestellprogramm speichere ich mit angehängtem DataSet wann welcher Artikel in welcher Menge bestellt wurde. (Table Order und OrderEntry)
    Und ggf. auch den Bestand zu einem bestimmten Datum. (Table StockEntry und Stocktaking)
    Das ganze zeige ich dann auf der Form mithilfe eines DGVs (in Order eingeschachtelte OrderEntry auf die Form gezogen) an.
    Hier habe ich als erste Spalte die Spalte "Datum". Hier verweist die OrderID auf OrderBindingSource.OrderDate und der Value Member ist dessen ID).
    Diese Spalte möchte ich gerne sortieren.
    Wenn ich das ganze im Designer erledigen will, erhalte ich den Fehler: Eine ComboBox mit festgelegter DataSource kann nicht sortiert werden. Sortieren Sie die Daten mit dem zugrunde liegenden Datenmodell.
    Also habe ich versucht die Bindingsource zu sortieren. Aber:

    VB.NET-Quellcode

    1. OrderBindingSource.Sort = "OrderDate DESC"

    funktioniert natürlich nicht. Ebenso klappt

    VB.NET-Quellcode

    1. OrderEntryBindingSource.Sort = "OrderDate DESC"
    nicht - weil gibts ja garnicht, bzw. nur indirekt.

    Wie ist das Vorgehen, wenn ich Daten nach einer eingeschachtelten Spalte sortieren möchte?

    *Topic verschoben*
    Bilder
    • DataSet.jpg

      288,67 kB, 1.920×1.080, 54 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Das würde mich auch interessieren. Den Sort kann man im Designer ja bei der BindingSource, welche der Cmb angehörig ist einstellen. Aber ich will ja auch nicht nach dem ValueMember, sondern
    nach dem DisplayMember sortieren - hier bin ich auch schon gescheitert, schien aber nicht so ultra wichtig zu sein, sonst hätte ich auch schon einen Post aufgemacht ;)
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Ich meinte im Übrigen was anderes:

    Ich hab ein DGV. In der angebundenen BindingSource gibts eine TreeID. Daraus zauber' ich eine ComboBox, und mache mir noch eine ungebundene Spalte, die sich auf die TreeBindingSource bezieht.
    Nun möchte ich aber mein DataGridView nach SortKey aus der TreeBindingSource sortiert haben. Wenn ich auf die Header klicke, sortiert er mir die Spalten nach der TreeID - was Blödsinn ist.

    Gibt's hierfür auch was schickes? OHNE Expression-Spalte? ;)
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Aber das sollte doch dann bei dir genau so funktionieren, wie bei mir?
    Weil ist doch das gleiche. Was stört dich an der Expression Spalte?

    Edit: @ErfinderDesRades
    Die beiden Spalten (Bestelldatum / und Bestandsdatum) habe ich erfolgreich angelegt und "verknüpft".
    Diese Spalte lässt sich im DGV hinzufügen und zur Laufzeit im DGV dannach sortieren (also sollte es ja auch im Code Problemlos gehen)
    Zwei Fragen hätte ich noch:
    1. Bennenung.
    Für mich wäre der richtige Name der neuen berechneten Spalte "OrderDate". Passt das so, oder macht es Sinn im Namen darauf zu verweisen, dass es sich um eine DataExpression handelt?
    2. Soriterung.
    Sollte ich lieber die BindingSource im Code nach Datum sortieren, oder im Designer?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerSmurf“ ()

    DerSmurf schrieb:

    Was stört dich an der Expression Spalte?


    Naja, das sind Spalten wo ne Expression drinne steht - die Spalten tauchen nur im DataSet, aber nicht in der Datenbank auf. Und wenn du mal
    mit'm Vorschlaghammer durch deinen DataSet-Designer gehst dann wirst du feststellen, dass 90% der Expressions einfach weg sind und du darfst
    die neu eintragen. Das geht bei 1-2 Tabellen in Ordnung - in meiner Anwendung mit 71 Tabellen ist das eine Katastrophe, deshalb versuch' ich die zu vermeiden.

    DerSmurf schrieb:

    Für mich wäre der richtige Name der neuen berechneten Spalte "OrderDate"


    Für mich wäre der richtige Name expOrderDate - dann kannst du direkt auf einen Blick sehen, dass es sich um eine Expression-Spalte handelt ;)
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    So.
    Also hier die komplette Lösung (exemplarisch für "Order" - bei "Stocktaking funktionierts natürlich ebenso):
    In der Table OrderEntry eine neue Row vom Typ System.DateTime. Dort bei Expression ​Parent(FK_Order_OrderEntry).OrderDate
    Dann im entsprechenden DGV die Spalte anzeigen lassen und WICHTIG! die vorher eingefügte Column mit Verweis aufs OrderDate in der Order Table musste ich drin lassen (hab sie visible=False).
    und dann die Bindingsource entsprechend sortieren.

    VB.NET-Quellcode

    1. ​OrderEntryBindingSource.Sort = "EXPOrderDate DESC"
    Dass das mit einer expColumn funzt, war mir bewusst. Hatte dennoch gedacht, dass es einen Weg ohne Expressions gibt. Aber das scheint
    MS wohl nicht vorgesehen zu haben. Genauso wie bei den Relationen. Ich kann unendlich tief buddeln im Designer, aber nicht aufwärts...
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup: