Wie kann ich über komplexes DataBinding die DataColumn-Werte in einem CE anzeigen lassen (ähnlich m:n-View) [gelöst]

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

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

    Wie kann ich über komplexes DataBinding die DataColumn-Werte in einem CE anzeigen lassen (ähnlich m:n-View) [gelöst]

    Hallo zusammen, vor allem an die mir bekannten tDS-Spezialisten @ErfinderDesRades und @VB1963.
    Ich bastel gerade an einem privaten Kassenbuch (tDS-only), welches unter anderem folgenden Teil beinhaltet:

    Es gibt Verrechnungsstellen (kurz VS, also z.B. EDOKA, MediumMarkt, Jupiter Elektromarkt, Meier Drogerie).
    Es gibt Positionen (kurz Pos, z.B. Lebensmittel, Spielzeug, Reparaturkosten)
    Jede VS kann mehrere Pos haben, jede Pos kann mehrere VS haben. Soweit so klar. Erinnert natürlich sehr an EdRs m:n-View. Nun aber möchte ich, dass z.B. in einer ListBox alle Namen jener Pos aufgelistet werden, die der VS über die Zwischentabelle zugeordnet sind. Es wäre m.E. Datenredundanz, wenn ich das über eine Expression-Spalte in der Zwischentabelle mache. Außerdem soll es ja da das ein oder andere Problem geben, wenn man dann irgendwann ne DB dranhängt, kam mir in mehreren Threads zu Augen.

    Ich wollte erfahren, ob man das mit geschicktem DataBinding im Designer erreichen kann. Derzeit mach ich es per Code. Es läuft. Aber toll find ich das nicht grad:

    VB.NET-Quellcode

    1. Private Sub BsBillingPoint_CurrentItemChanged(sender As Object, e As EventArgs) Handles BsBillingPoint.CurrentItemChanged
    2. LbxPossiblePositions.DataSource = Tds.BillingPointPositions.Where(Function(x) x.BillingPointsRow Is BsBillingPoint.Current(Of Tds.BillingPointsRow)).Select(Function(x) x.PositionsRow).ToList
    3. LbxPossiblePositions.DisplayMember = "Name"
    4. LbxPossiblePositions.ValueMember = "ID"
    5. End Sub

    BsBillingPoint ist meine BillingPointBindingSource.
    .Current(Of ...) ist eine Extension von mir, das Gleiche wie EdRs ".At()". Der Sinn dürfte hoffentlich klar sein.

    Das Ergebnis:

    "Medikamente" ist nur 1x in den Pos vergeben, aber eben 2 VS zugeordnet.

    btw: gibt es für "Verrechnungsstelle" einen besseren Begriff als das von mir verwendete "BillingPoint"? Google spuckt "clearing house" aus. Aber irgendwie trau ich dem Braten nicht.

    EDIT: Es geht bei dem gesuchten Oberbegriff auch um solche VS wie Kirche (Spende), öffentliche Hand (Steuern, Parkkosten) und Privatpersonen. Ja, und auch der Barbestand selber - z.B. bei Funden oder unerklärlichen Verlusten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    VaporiZed schrieb:

    in einer ListBox alle Namen jener Pos aufgelistet werden, die der VS über die Zwischentabelle zugeordnet sind.
    Mein erstes Zucken wäre ein DGV mit einer ComboboxColumn statt der Listbox.
    Also ein Original-m:n - View.

    Übrigens berechnete Spalten im TDS machen afaik keine Probleme mitte Db.
    Probleme gibts, wenn man inne Db berechnete Spalten anlegt. Was ja eh höchst fragwürdig ist.

    ErfinderDesRades schrieb:

    Probleme gibts, wenn man inne Db berechnete Spalten anlegt.

    Sofern man diese nur ausliest und nicht dran rum ändert und zurück schreibt, funktioniert das tadelos... hab ich so im Einsatz...
    "Hier könnte Ihre Werbung stehen..."
    also ich vermute, wenn man einen DataAdapter mittm Commandbuilder konfiguriert - was ja normal das einfachste ist - , und dabei als SelectCommand "Select * from Tabelle" angibt -
    Dass dann der DataAdapter ein UpdateCommand enthält, was auch die berechnete Db-Spalte updaten will - was ja nicht geht.

    Also nicht selbst erprobt, nur Vermutung, aufgrund der hiesigen Fallschilderungen.
    Ich hatte mir vor der Themeneröffnung sicherheitshalber nochmal die vier-Views-Videos (kurz 3V? Nee, klingt nach Batterie. Belass ich es in Zukunft für Eingeweihte bei VVV) angeschaut. Letztenendes würde ein normaler m:n-View ja zu einer Änderung der dahinterliegenden Werte in der Zwischentabelle führen. Das ist nicht mein Plan. Mein Ziel ist eine Auflistung der Werte. Ach Moment. Ich muss ja keine "echte" ComboBox-Spalte machen, es reicht ja aus, den Style umzuändern, sodass es nur eine Anzeige ist. Dann noch ein bisken am Design gebastelt und fertig ist das ListBox-like DGV:

    Schade, dass mein eigentliches ListBox-only-Vorhaben nur mit Zusatzcode umzusetzen ist. Nun ja, für sowas wurde die ListBox wohl nicht geschaffen. Aber jetzt dafür ein eigenes Control zu basteln wäre Overkill.

    btw: Hat noch jemand Übersetzungsvorschläge für meine Verrechnungsstellen? Oder eine deutsche Alternative, die dann übersetzt wird. Mir kam noch sowas wie Geschäfts-/Handelspartner in den Sinn, aber das trifft es meines Erachtens auch nicht immer. Ja, mit Namensgebung kann ich mich Stunden beschäftigen :rolleyes:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Aber jetzt dafür ein eigenes Control zu basteln wäre Overkill.


    Manchmal schont das aber auch ganz erheblich die Nerven. Ich habe vorhin versucht eine m:n-Relation darzustellen, bei der nicht nur die aktuellen Verknüpfungen sondern auch alle weiteren möglichen Partner in einer Ansicht angezeigt werden. Nach einigen Stunden hab ich dann die Flinte ins Korn geworfen und nach weiteren 30min lief ein eigenes Control, das genau diese Funktionalität abgebildet hat.
    Option strict = on

    If it's stupid and it works it ain't stupid.

    VaporiZed schrieb:

    Mir kam noch sowas wie Geschäfts-/Handelspartner in den Sinn, aber das trifft es meines Erachtens auch nicht immer.
    Mir fiel sofort TradingPartner und CommercialPartner ein.
    Aber am besten gefällt mir der in der Finanzwelt gebräuchliche Ausdruck Counterparty.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --