Welche Lösung für einen Report (Bericht)

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von schnibli.

    Welche Lösung für einen Report (Bericht)

    Hallo Zusammen.

    Ich bin daran ein Bestellformular (Existiert Bereits) mit einem Bericht zu erstellen.

    Nun ist die frage mit welchem "Berichts Assistenten" ich den Bericht erstellen soll.

    Zu den Daten:

    -Es soll 5 Variable Felder geben (werden von einer DB gefüttert "Lieferanten")
    -5 Feste felder (meine Anschrift)
    -Untendran soll Eine Tabelle hin mit Daten aus einer 2 Tabelle ("Datenset") Artikel die Bestellt werden sollen.
    -Es soll Gesammtbetrag (=summe(Spalte5) geben und die Zeilen der Tabellen sollen von Nummeriert sein 0..10..20 ect.

    Was würdet ihr mir da Empfehlen?


    Freundliche Grüsse
    Hallo,

    Vielen Danke für den Link/ die Antworten

    Ein einfaches DGV (bindingsource) konnte ich nun Anzeigen lassen (sogar mit Zeilennummerierung)

    Jedoch habe ich das Problem, das ich Eine Tabelle Brauche die Daten au 2 Bindingsource's nimmt.
    -Erste Tabelle Bestellnummer,Bestellmenge, Artikel ID
    -Zweite Tabelle ArtikelID, Artikel_Name, Artikel_Preis, Artikel_nummer

    Ich bräuchte in meinem Report:
    Artikel_Name,Artikel_Nummer,Artikel_Preis,Bestellmenge

    Nur komme ich nicht darauf wie ich dies Hinkriege...


    Danke
    Den MS-Bericht.... Also mit dem der in VB schon integriert ist. Den hat man mir empfohlen... mit berichten kenn ich mich noch nicht so aus...

    Momentan läuft es über access aber das geht immer sehr lange... daher würde ich es gerne in VB erledigen.
    Ne das Problem ist das ich sachen auslagern muss ect. wenn ich die komplette liste der schon bestellten Artikel laden habe ich ca 2sec. für access zu starten, bericht erstellen und pdf generieren bruache ich ca.30sec.

    Schneller währe es auf jedenfall.

    Die Datenbank (vb Teil) ist sehr schnell.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „schnibli“ ()

    schnibli schrieb:

    Jedoch habe ich das Problem, das ich Eine Tabelle Brauche die Daten au 2 Bindingsource's nimmt.
    -Erste Tabelle Bestellnummer,Bestellmenge, Artikel ID
    -Zweite Tabelle ArtikelID, Artikel_Name, Artikel_Preis, Artikel_nummer

    Ich bräuchte in meinem Report:
    Artikel_Name,Artikel_Nummer,Artikel_Preis,Bestellmenge

    Vorausgesetzt - du hast ein typ. Dataset:
    Erstelle via Designer eine neue Tabelle mit den Spalten ID, Artikel, Nummer, Preis, und Menge ...

    VB.NET-Quellcode

    1. Dim Result = From rw1 In DeinDataset.ErsteTabelle
    2. Join rw2 In DeinDataset.ZweiteTabelle On rw1.ArticelID Equals rw2.ArtikelID
    3. Select New With {.ID = rw1.ArtikelID,
    4. .Artikel = rw2.Artikel_Name,
    5. .Nummer = rw2.Artikel_Nummer,
    6. .Preis = rw2.Artikel_Preis,
    7. .Menge = rw1.Bestellmenge}
    8. 'deine neue Tabelle befüllen mit Result
    9. DeinDataset.DeineNeueTabelle.Clear() 'ev. vorher noch Daten der Tabelle entfernen...
    10. Result.ForEach(Sub(rw) DeinDataset.DeineNeueTabelle.Rows.Add(rw.ID, rw.Artikel, rw.Nummer, rw.Preis, rw.Menge))
    mit dieser Tabelle kannst du dann wieder weiterarbeiten...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()

    Hallo,

    Danke für deine Antwort.

    Ich habe den Code wie folgt angepasst

    VB.NET-Quellcode

    1. Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
    2. Dim Result = From rw1 In Artikeldatenbank_beDataSet.Bestellen
    3. Join rw2 In Artikeldatenbank_beDataSet.Artikeldatenbank On rw1.ID Equals rw2.ID
    4. Select New With {.ID = rw1.ID,
    5. .Artikel = rw2.Artikel,
    6. .Nummer = rw2.Artikel_Nummer,
    7. .Preis = rw2.Preis_Rabatt,
    8. .Menge = rw1.Bestellen}
    9. 'deine neue Tabelle befüllen mit Result
    10. Artikeldatenbank_beDataSet.Bestellbericht.Clear() 'ev. vorher noch Daten der Tabelle entfernen...
    11. Result.ForEach(Sub(rw) Artikeldatenbank_beDataSet.Bestellbericht.Rows.Add(rw.ID, rw.Artikel, rw.Nummer, rw.Preis, rw.Menge))
    12. End Sub

    Nun zeigt er mir dies

    VB.NET-Quellcode

    1. Result.ForEach(Sub(rw) Artikeldatenbank_beDataSet.Bestellbericht.Rows.Add(rw.ID, rw.Artikel, rw.Nummer, rw.Preis, rw.Menge))

    Blau unterstrichen.
    Bilder
    • Fehler.PNG

      6,11 kB, 938×48, 137 mal angesehen
    Linq wird nicht helfen - es handelt sich um eine selbstgebastelte Extension:

    VB.NET-Quellcode

    1. <DebuggerStepThrough(), Extension()> _
    2. Public Sub ForEach(Of T)(ByVal Subj As IEnumerable, ByVal Action As Action(Of T))
    3. For Each itm As T In Subj
    4. Action(itm)
    5. Next
    6. End Sub

    nimm stattdessen eine normale For-Each-Schleife
    Ich krieg die For each Schlaufe nicht in mein Code :s

    VB.NET-Quellcode

    1. Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
    2. Dim Result = From rw1 In Artikeldatenbank_beDataSet.Bestellen
    3. Join rw2 In Artikeldatenbank_beDataSet.Artikeldatenbank On rw1.ID Equals rw2.ID
    4. Select New With {.ID = rw1.ID,
    5. .Artikel = rw2.Artikel,
    6. .Nummer = rw2.Artikel_Nummer,
    7. .Preis = rw2.Preis_Rabatt,
    8. .Menge = rw1.Bestellen}
    9. 'deine neue Tabelle befüllen mit Result
    10. Artikeldatenbank_beDataSet.Bestellbericht.Clear() 'ev. vorher noch Daten der Tabelle entfernen...
    11. End Sub


    Dies ist ja der erste teil.

    Wie bringe ich jedoch den 2. Teil da hin :s
    @schnibli:
    Sorry: ohne DB-Extension von EDR läuft diese ForEach nicht, die habe ich bei meinem obigen getesteten Beispiel eingebunden gehabt und habe ich leider übersehen...
    Aber wie EDR bereits in Post #15 erklärt hat, geht das mit einer einfachen For-Each Schleife problemlos (siehe seinen obiger Code).
    Du kannst den LINQ-Ausdruck mit einer Where-Klausel beliebig erweitern und deine Parameter verwenden:

    VB.NET-Quellcode

    1. Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
    2. Dim Result = From rw1 In Artikeldatenbank_beDataSet.Bestellen Where Not rw1.RowState = DataRowState.Deleted ...
    3. Join rw2 In Artikeldatenbank_beDataSet.Artikeldatenbank On rw1.ID Equals rw2.ID Where Not rw2.RowState = DataRowState.Deleted ...
    4. Select New With {...}

    oder deine neue Tabelle mit DeineTabelle.Select("Filter") nachbehandeln (aber da würde ich bei LINQ bleiben, wenn man schon dabei ist!)
    aber man kann auch im Bericht einen Filter setzen...