Listbox Displaymember 2 Spalten

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

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

    Listbox Displaymember 2 Spalten

    Hi,

    ich versuche gerade, in eine gebundene Listbox 2 Spalten zu bekommen, wobei in der zweiten Spalte nur manchmal Daten stehen können.

    Ich habe bereits das hier probiert, scheitert aber daran, das mein Dataset "tables" gar nicht kennt....

    verschiedene Spalten als DisplayMember aus DataSet

    Ich kann das leider auch nicht in der Datenbank selbst (MariaDB) mit Concat zusammenfügen, da mir die DB dann immer nur "NULL" für alle Spalten ausspuckt.

    Idee dahinter ist eine kleine Lagerverwaltung.
    Jeder Lagerplatz hat eine verschiedene Parameter wie Volumen und max. zulässiges Gewicht. Jeder Lagerplatz kann leer oder mit einem oder mehreren Artikeln belegt sein.
    Das will ich in einer Liste (will kein Datagrid dafür nehmen) darstellen. In der hinzuzufügenden Spalte "belegt" steht dann entweder nichts oder eine oder mehrere Artikelnummern (das macht die Funktion Group_concat)
    Allerdings läßt sich komischerweise ein concat mit einem Group_concat Ergebnis nicht zusammenführen. Dann steht in allen Spalten NULL. Deswegen dieser Ansatz....


    Das ist mein bisheriger Code:

    VB.NET-Quellcode

    1. Dim sql As String
    2. Dim SDA As New MySqlDataAdapter
    3. Dim dbDataset As New DataTable
    4. Dim bSource As New BindingSource
    5. Dim Mysqlconn As New MySqlConnection
    6. Mysqlconn.ConnectionString = DBConnection
    7. sql = "Select LP.ID, concat(LP.Lagerplatz, ' \t', LA.Lagerart, ' \t', LA.Gewicht, ' kg \t', LA.Tiefe, 'Tx',LA.Breite,'Bx', LA.Hoehe,'H ', Lo.Lagerort) AS Lagerort, Group_concat(LB.ArtikelID) as belegt from Lagerplatz LP "
    8. sql = sql & "inner join Lagerart LA on LP.Lagerart = LA.ID "
    9. sql = sql & "inner join Lagerort LO on LP.Lagerort = LO.ID "
    10. sql = sql & "left OUTER join Lagerbelegung LB ON LP.Id = LB.Lagerplatz"
    11. sql = sql & " GROUP BY lb.Lagerplatz, lp.Lagerplatz"
    12. sql = sql & " ORDER BY lp.Regal, lp.Fach, lp.Ebene, lp.Unterfach, lp.Fachboden"
    13. COMMAND = New MySqlCommand(sql, Mysqlconn)
    14. SDA.SelectCommand = COMMAND
    15. SDA.Fill(dbDataset)
    16. bSource.DataSource = dbDataset
    17. lstLagerplatz.DisplayMember = "Lagerort" 'Hier würde ich gerne Lagerort + belegt anzeigen
    18. lstLagerplatz.ValueMember = "ID"
    19. lstLagerplatz.DataSource = bSource
    20. SDA.Update(dbDataset)
    21. lstLagerplatz.SelectedIndex = -1
    Bilder
    • lager.png

      34,77 kB, 840×828, 170 mal angesehen

    Superuse schrieb:

    scheitert aber daran, das mein Dataset "tables" gar nicht kennt
    In welchem Zusammenhang? Der Code dazu, wo es nicht klappt?

    Superuse schrieb:

    Dim dbDataset As New DataTable
    Mit der Namensgebung schießt Du Dir selbst ins Bein. Name: dbDataSet, Typ: DataTable. Ein DataSet ist aber keine DataTable. Daher dürfte bei der Namensgebung einiges an Verwirrung vorprogrammiert sein.
    Für Dein Vorhaben ist die ListBox denkbar ungeeignet. Ein DGV könnte diese Daten ohne zusätzlichen eigenen Code anzeigen und binden. Da in eine ListBox per DataBinding zusammengesetzte Strings reinzuquetschen ist m.E. inhaltlich Mumpitz. Das ist Pfeil-Rücken-Brust-Auge.
    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.
    na, da wirst du wohl die Doku von Group_concat selbst nachlesen müssen, wenn das nicht richtig funktioniert.
    Mir jdfs. war dieses Konstrukt bis eben unbekannt.

    Ansonsten hattest du geschrieben, dass du kein Datagrid nehmen wolltest, von das auch DataTable keine Option ist, las ich da jetzt auf die Schnelle nix.

    Jo, viel Spass noch.

    Ach -

    Superuse schrieb:

    scheitert aber daran, das mein Dataset "tables" gar nicht kennt
    Welches Dataset?
    Im Code gibts eine Variable, die heisst dbDataset. Aber das ist kein Dataset, sondern eine DataTable (aber das sagte man dir ja schon).
    Jdfs. dass dbDataset 'tables' nicht kennt ist logisch, weil eine DataTable hat keine 'tables' (sondern ist selbst eine).

    Wie gesagt: viel Spass noch.