Array of Structure und keinen Plan :-(

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

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Array of Structure und keinen Plan :-(

    Hallo Experten, ich könnte ein wenig Hilfe gebrauchen...

    Ich bin eigentlich ziemlich Laie und habe folgendes Problem, das ich mit VB 2015 lösen möchte:

    Gegeben (übergeben) ist ein eindimensionales Array "Bestellung(x)"
    Das Array wird aus einer Structure gebildet und die enthält einen Lieferanten, einen Artikel und eine Menge.
    Also zum Beispiel

    VB.NET-Quellcode

    1. Bestellung(1).Lieferant = "LEGO"
    2. Bestellung(1).Artikel = "Bausatz 1"
    3. Bestellung(1).Menge = 2
    4. Bestellung(2).Lieferant = "Brauhaus"
    5. Bestellung(2).Artikel = "Bier hell"
    6. Bestellung(2).Menge = 5
    7. Bestellung(3).Lieferant = "LEGO"
    8. Bestellung(3).Artikel = "Bausatz 5"
    9. Bestellung(3).Menge = 1


    Da die unterschiedlichen Artikel bei unterschiedlichen Lieferanten bestellt werden müssen, suche ich gerade krampfhaft nach einer Möglichkeit, das Array durchzugehen und die verschiedenen Artikel zu jedem Lieferant entsprechend zusammen zu fassen. Es kann sein, dass 10 Artikel bei 10 verschiedenen Lieferanten bestellt werden müssen, es kann aber auch vorkommen, dass 15 Artikel bei nur 4 verschiedenen Lieferanten bestellt werden müssen.

    Meine erste Idee, alle Bestellungen beim gleichen Lieferanten jeweils in einem separaten Array zu sammeln und von dort aus auf das Formular zu übertragen, bekomme ich nicht realisiert, weil ich ja vorher nicht weiß, wie viele Lieferanten und wie viele verschiedene Artikel pro Lieferant bestellt werden sollen...

    Hier fehlt mir also zunächst mal generell ein "geistiger Schubs", wie ich am besten an das Problem herangehen könnte.

    Als Endergebnis hätte ich gern für jeden Lieferanten aus dem Array mit den Bestellungen eine Aufstellung, welche Artikel in welchen Stückzahlen bestellt werden müssen.

    Kann mir hierzu jemand einen klugen Tipp geben, bitte?

    Code-Tags eingefügt. ~Thunderbolt

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

    heyho,

    da ich grad nur am Handy bin gibt es nur nen link und kein beispiel von mir.

    du könntest das mit nem linq-Group by machen.
    einfach nach Lieferant gruppieren und dann halt per for each durchgehen.

    Hier mal dazu der versprochene link: docs.microsoft.com/de-de/dotne…linq/introduction-to-linq

    mag bestimmt auch noch andere Möglichkeiten geben aber so würde ich das angehen.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    @Dan_one
    Du müsstest zu Beginn dein Array einmal aufteilen:
    1) Lieferanten
    2) und seine Artikel
    3) Bestellung mit Menge, Lieferant und seine Artikel
    Da schlage ich dir gleich ein typisiertes Dataset zur Realisierung eines solchen Datenmodells vor, wo du deine Tabellen entwerfen kannst...
    Schaue dich im TUTORIAL-Bereich Datenbank einmal um - da gibt's sehr vieles, wie du es angehen kannst...
    jou. Datenverarbeitung im typDataset.
    Aber auch sonst kann man mit einem Structure-Array nicht froh werden.
    Datensätze müssen Class-Typen sein, weil einen Datensatz will man zB an eine annere Methode übergeben, und ihn dort manipulieren.
    Mit einem Structure-Typ ist solch unmöglich, denn Structures werden nur als Kopien übergeben.

    Aber wie gesagt: Nimm typisiertes Dataset, da ist auf alle solche Feinheiten geachtet.
    Bei den Datenbank-Tutorials habich einige Tuts eingestellt, die mit typDataset umgehen, als "Appetitmacher" empfehle ich
    vier Views-Videos
    Beachte, dass die Tuts zwar der Datenbank-Rubrik zugeordnet sind, aber mit Datenbank garnix tun.
    Erstmal danke @all!

    Ich bin noch nicht wirklich viel weiter gekommen, denn weder kenne ich mich ansatzweise mit LINQ aus, noch habe ich je in meinem Leben mit einem Dataset gearbeitet. Ich brauche ja auch nicht wirklich eine echte Datenverarbeitung, sondern wirklich nur eine kleine, einfache Lösung mit insgesamt etwa 5 bis 10 Lieferanten und jeder Lieferant hat zwischen 3 und 15 Artikel, die er liefert.

    Was mir im Hinterkopf herumgeistert, wäre eine Möglichkeit zu finden, wie man Variablen zur Laufzeit erzeugen könnte...
    Also das Programm erkennt, dass es aktuell und insgesamt 6 Lieferanten gibt und generiert daher 6 kleine, dynamisch wachsende, temporäre Arrays, wo dann vielleicht 1 oder 2 bestellte Artikel hinzu gegeben werden und wo bei einem Lieferant nichts bestellt wird, bleibt das Array einfach leer. Wie gesagt: Ich brauche keine aufwändige Datenverarbeitung, sondern nur eine kleine, nerdige und einfache Lösung :)
    Was wir dir empfehlen ist die absolut einfachste Lösung.
    Die Problematik Lieferant - Artikel - Bestellung ist das allerbanalste Thema für eine Datenverarbeitung, und ich hab Vergleichbares auch mal als Beispiel hergenommen, um Prinzipien des bereitstehenden Instrumentariums in eim Tutorial aufzuzeigen.
    Im Anhang eine "kleine, nerdige und einfache Lösung" eines Kassenprogramms (aus den Tutorial-Sources).
    Wenn du das Ding genau untersuchst, stellst du fest, dasses bereits sehr viel leistet:
    Laden, Speichern, Sortieren, Zufügen, Editieren, Löschen jedes einzelnen Datensatzes, und auch Gruppen davon.
    Ausserdem automatisches Aufsummieren einer Preis-Spalte.
    Oder lösch einfach mal einen Artikel, und stell fest, dass aus allen Bons dieser Artikel dann logischerweise rausfliegt, und die Rechenergebnisse automatisch sich anpassen.
    (kannst ruhig löschen, kannst danach ja wieder neu laden)
    Alles in weit unter 200 Zeilen.

    Glaub mir: Ohne die für derlei Dinge vorgesehene Technologie würde man das auch nicht in 1000 Zeilen hinbekommen.
    Und darfst mir auch glauben: Der kürzeste Weg zu deiner kleinen nerdigen Lösung ist, eben diese Technologie zu erlernen.

    Gleichzeitig ists aber auch ein langer Weg, weil wie gesagt: du musst dafür sauber programmieren lernen.
    An Formulierungen wie "Variablen zur Laufzeit erzeugen", oder "das Programm erkennt..." merkt man, dass du von programmiererischer Denke noch recht weit entfernt bist.
    Variablen kann man nicht zur Laufzeit erzeugen, und für dein Programm gibts auch nix zu "erkennen".

    Sondern es sind Lieferant-, Artikel-, Bestell-Datensätze anzulegen und zu verwalten (also laden, speichern, anzeigen, ändern, etc...)

    Ob du willst oder nicht: eine Datenverarbeitung.
    Dateien
    • MiniKass.zip

      (27,53 kB, 135 mal heruntergeladen, zuletzt: )

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

    In deinem Quelltext fand ich eine Stelle besonders interessant:

    For each ... in...
    Dim ...
    Dim ...

    und genau so etwas wäre ja genial, nur eben nicht als Dataset (oder -grid), sondern als eigenes, kleines Array mit eigenem Namen.

    Das Expandoobject sieht auch interessant aus, nur verwirrt mich das momentan noch zu sehr.
    Hmm - was du "interessant" fandst, sind einfach ein paar Schlüsselworte der Programmiersprache. Absolutly Basics, das musste halt lernen und richtig verstehen - ein gutes Programmierbuch sollte da helfen.

    Was du "genial" fändest, ergibt leider keinen Sinn: "so etwas ... als eigenes, kleines Array mit eigenem Namen"?
    Auch "Expandoobjekt" ist mir unbekannt.

    Ich hätte eher gehofft, dich fürs Dataset zu interessieren, da hätte ich dann vlt. weiterhelfen können.
    Ja, ich verstehe dich schon. Bei mir liegt der Schwerpunkt gerade eher auf dem, was hinten dran hängt und nicht auf einer Datenbankanwendung.
    Ich muss halt für die Weiterverarbeitung nur erkennen, bei welchem der wenigen Lieferanten etwas bestellt werden soll, damit ich das zusammenfassen kann und nicht mehrere Einzelbestellungen an den gleichen Lieferanten rausgehen. Dazu muss ich die hinterlegten, lieferantenspezifischen Formulare befüllen...

    Dan_one schrieb:

    Ja, ich verstehe dich schon. Bei mir liegt der Schwerpunkt gerade eher auf dem, was hinten dran hängt und nicht auf einer Datenbankanwendung.
    Hmm, da habich Zweifel, dass du mich verstehst.
    Zum Beispiel redet hier niemand von einer Datenbankanwendung.
    Auch das Code-Beispiel, was ich dir gegeben habe - hast du da irgendeinen Bezug zu einer Datenbank drin entdecken können?

    Sorry, ich bin nervig und rücksichtslos, arrogant, und KorintenKacker. Aber aus gutem Grund:
    Beim Programmieren, und mehr noch bereits beim Denken über Programmier-Themen muss man exakt definierte Begriffe richtig verstehen und anwenden.
    Also da entschuldige ich mich gleich mal für mein schlechtes Benehmen, weil ich dir ungeschminkt sage, dasses imo hier keinen Sinn macht, weiterzumachen.