Menü aus Datenbank

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

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von razzzer530i.

    Menü aus Datenbank

    Moin Leute,

    ich benötig Hilfe von einem Brain....

    Benötigt wird eine Funktion, die mir ein Menü basierend auf einer Tabelle erstellt.

    Tabelle sieht so aus:

    VB.NET-Quellcode

    1. Dim dtMenue As New DataTable("Menue")
    2. dtMenue.Columns.Add("Itemtext", GetType(String))
    3. dtMenue.Columns.Add("Parenttext", GetType(String))
    4. dtMenue.Columns.Add("level", GetType(Integer))
    5. dtMenue.Rows.Add("Artikelstamm", "", 0)
    6. dtMenue.Rows.Add("Artikelstamm2", "", 0)
    7. dtMenue.Rows.Add("Artikelstamm3", "", 0)
    8. dtMenue.Rows.Add("as1", "Artikelstamm", 1)
    9. dtMenue.Rows.Add("as2", "Artikelstamm", 1)
    10. dtMenue.Rows.Add("asd-1", "as1", 2)

    Anhand der Einträge kann ich so das Menü organisieren.

    Das Menü selbst sieht so aus:


    Das ganze ist folgendermaßen gestaffelt:
    Panel > Button > Panel > Subbutton level1 > Panel > Subbutton level2.
    Für jeden Button der in level 0 erstellt wird und der children hat, wird ein panel erstellt, das im Z-Index unterhalb des Buttons gedockt wird.

    Die entsprechenden Buttons anzupassen ist kein Problem, jedoch komme ich nicht dahin, eine rekursive Funktion zu schreiben, die die Elemente automatisch richtig erstellt.

    Ich komme da einfach nicht weiter.
    Wäre jemand so freundlich, mir bei diesem einem Projekt etwas intensiver zu helfen?
    IDie Subpanels sind unsichtbar, und werden mit Klick auf den Parentbutton gezeigt / wieder versteckt.

    Hat da jemand was auf lager?

    @RodFromGermany
    Du hast mir vor 2 Jahren mal sowas ähnliches für ein Treeview nähergebracht. Kann ich dich hier dafür ebenfalls begeistern? :x
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

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

    @razzzer530i Eher nicht, sorry.
    Ich hab was anderes, einen Detail-View für den ausgewählten Datensatz, aber da mache ich alles zu Fuß, was da ist, kein Automat.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hier wird sowas verhandelt: TreeView aus Datenbank füllen - Child-Nodes "Problem"

    Muss das sein, mit deiner code-gebastelten, untypisierten DataTable - soll das dauerhaft so bleiben, und warum?

    Die Spalte "ParentText" ist für das Unterfangen evtl. entbehrlich, aber um da einzusteigen, hätte ich erst meine Frage geklärt.
    @ErfinderDesRades
    die Tabelle ist eigentlich eine SQL Datenbank. Wollte nicht die ganze Abfrage mit rein nehmen.

    Sieht so aus. Mir geht es um den Aufbau auf der Form. Woher die Daten kommen ist eigentlich egal.
    In PHP ist das kein Problem gewesen. Hier tue ich mich sehr schwer.

    Problem: Die Anordnung im Mainpanel und die Zuordnung zum übergeordneten Button.
    Ich dachte da an eine Zuordnung via Tag? Ist ein bisschen kompliziert.

    Notfalls wäre ich auch bereit bei der Lösung an den Helfer zu donaten. Ich kriege es einfach nicht hin.
    Die Funktionen dahinter hardcoden ist kein Problem. Die Menüpunkte ausklappen und sowas.
    So sieht die Performance aus:
    streamable.com/3l21s5

    Wäre jemand zeitlich wohl verfügbar und würde sich ne Stunde mit mir zusammensetzen? Wäre wirklich nice :)
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

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

    razzzer530i schrieb:

    Wollte nicht die ganze Abfrage mit rein nehmen.
    ...
    Woher die Daten kommen ist eigentlich egal.
    Jo, aber worin sie verpackt sind ist relevant - und eine selbstgebastelte DataTable ist ein ziemlich jämmerliches Instrument.
    "Wollte nicht die ganze Abfrage mit rein nehmen." deutet auch darauf hin, dass du auch in dem Bereich alles selber bastelst - was üblicherweise ein irrsinniger Aufwandt ist, und unsicher, und langsam.
    Und nur, weil dir die vorgesehenen Techniken nicht bekannt sind - ist doch schade.
    Und ich investier auch nur ungern in Code, den ich sofort von Platte schmeissen würde, wenns meiner wäre.

    Übrigens unterscheidet sich die Datenbank-Tabelle von deiner selbstgebastelten Tabelle - was ist nu richtig?
    @ErfinderDesRades
    die Abfrage mache ich über MySQL.dll Funktionen. Habe ich also nicht selbst gebastelt.
    Aus Testzwecken lade ich die Tabelle vollständig in eine Datatable. Ich kann aber genau so gut die SQL Querries direkt machen.
    Lohnt sich gerade aber noch nicht, da mir die Funktionen zum Aufbau des Menüs fehlen.
    Die richtige Tabelle ist die MySQL Tabelle, die auf dem Screenshot zu sehen ist. Ich habe die gestern soweit erweitert.
    Ich benötige diese Form von Menü recht häufig, weshalb das für mich so wichtig ist.
    Am liebsten würde ich mir ein Steuerelement daraus basteln, dass ich jederzeit wieder verwenden kann.
    Ich scheitere aber leider schon vorher.
    Wie gesagt, du würdest mir wirklich weiter helfen. Sollte der Code für dich nicht relevant sein, wär ich aber auch für ein Donate bereit. Ich benötige den Code nicht mal für kommerzielle Zwecke.
    Es geht hier wirklich rein um Coding für mich.

    Wenn es eine Art Schulung wäre, wär das auch easy. Oder ein Tut. Keine Ahnung. Ich kriege den rekursiven Aufbau einfach nicht hin :x
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    @ErfinderDesRades


    Hier ist ein gepacktes Projekt.
    Lediglich die GunaUi.dll musst du zu den Steuerelementen packen. Dann passt alles.
    Habe ne Datenbank mit rein gepackt. Database1.mdf

    ModernMenü.rar
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    @ErfinderDesRades
    Ich habe noch nie mit einer SQL DB direkt in VB gearbeitet. Ich nutze immer das MySQL Pack. Databinding habe ich noch nie so gemacht.
    Arbeite mich heute abend da rein, damit ich dir das vollständig schicken kann. Habe bislang immer nur die MySQL Tables vom Server direkt oder in einer DT geladen.
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Dringend empfohlen: Visual Studio - Empfohlene Einstellungen

    Ansonsten hab ich ein typisiertes Dataset mir generiert und arbeite damit.

    Ansonsten scheint es mir mit Atombomben auf Spatzen, eine SqlServer-Datenbank zu unterhalten, um 8 (!) Datensätze abzurufen.
    Dateien
    • ModernMenü01.zip

      (480,76 kB, 95 mal heruntergeladen, zuletzt: )

    ErfinderDesRades schrieb:


    Danke, angepasst! Es sind eigentlich 60 - 100 Datensätze pro Programm. Da ich das Menü jedoch änderbar machen möchte, sodass auch jemand anders über die DB die Bearbeitung vor nimmt, ist das der beste Weg für mich. Ich möchte vermeiden, den Quellcode zu ändern, nur weil sich eine Bezeichnung ändert oder ein neuer Unterpunkt hinzu kommt. Die Views, die angezeigt werden haben keinerlei Einfluss auf den Code.
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    @ErfinderDesRades

    Danke, leider kann ich das Projekt nicht öffnen da ich umgehend den Fehler hier bekomme:
    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler Der Typ- oder Namespacename "Microsoft" ist im Namespace "mqttf" nicht vorhanden. (Möglicherweise fehlt ein Assemblyverweis.) [C:\Users\Default\Downloads\ModernMenü\obj\Debug\Fakes\gui\f.csproj] ModernMenü C:\Users\Default\Downloads\ModernMenü\f.cs 19

    Aus Datei lesen? Also eig. schneller, ich weiß. Problem ist aber, dass ich dann die Datei immer updaten muss. Vlt. überdenke ich das ganze mit der SQL DB noch mal.
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    ich konnte es nicht öffnen, weil mein Zip die Guna.dll nicht enthielt. Diesen aber kann ich öffnen.
    Dateien
    • ModernMenü1.zip

      (2,35 MB, 93 mal heruntergeladen, zuletzt: )

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

    @ErfinderDesRades

    Vielen Dank! Die Funktionen in der CollectionX geben mir völlig neue Möglichkeiten. So gut bin ich leider noch nicht im Entwickeln. Hast mein Problem gelöst und einen gut bei mir !
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~