Wie Daten weiter verarbeiten und Druckausgabe

  • VB.NET

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

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

    Follow the rabbit ...
    eh ... den Programmhinweisen: Alt+Enter => Vorschäge
    da wird bestimmt auch drinstehen, dass da der Namespace »Data« importiert werden sollte, damit dem Programm bekannt ist, was DataTable zu bedeuten hat. Du hast zwar einige Importe, aber nicht die richtigen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Habe ja versucht dem Rabbit zu folgen, aber der Vorschlag siehst du im Bild. Wenn ich diesen nutze klappt es immer noch nicht.
    Habe jetzt noch Imports Datatable, aber auch nicht geklappt.
    Bilder
    • datat2.jpg

      84,31 kB, 892×225, 25 mal angesehen
    probier mal entweder Imports Data oder Private MyTable As Data.DataTable

    EDIT: Nur zur Sicherheit: Du hast schon in den Projekteigenschaften bei »Verweise« System.Data mit drinnen, oder?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

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

    @Waxweazle Probier mal, das Table in DataTable groß zu schreiben. Eigentlich müsste Dir die IDE den richtigen Import anbieten, den @VaporiZed genannt hat.
    Sind da noch weitere Fehler, die wir hier nicht sehen konnten?
    Vielleicht probierst Du erst mal in einem kleinen separaten Projekt die DataTable aus, da bekommst Du besser ein Gefühl dafür.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    System.Data war Standardmäßig angewählt. Die Zeile

    VB.NET-Quellcode

    1. Private MyTable As Data.DataTable
    hat geholfen. So werde mir das Beispielprogramm jetzt mal durchgehen und versuchen Datatable zu verstehen und auf mein Beispiel an zu wenden. Werde weiter berichten :)

    Edit: habe mir das jetzt angeschaut und versucht an zu wenden. Bekomme die erste Zeile auch ausgefüllt und dann hab ich ein Problem.
    1. Ich berechne mein längstes Profil und wie viel Stück
    2. setze ich die erste Zeile mit
    newRow(0) = istabnr
    newRow(1) = istabstk
    newRow(2) = Stablänge
    newRow(3) = istk
    newRow(4) = längstesprofil
    Me.MyTable.Rows.Add(newRow)
    3. Jetzt geht es in die Schleife um noch zu berechnen ob weitere Profile geschnitten werden können
    4. möchte ich die neuen Profile in die neue Zeile schreiben mit:
    newRow(3) = istk2
    newRow(4) = minl
    Me.MyTable.Rows.Add(newRow) => Hier bekomme ich dann eine Fehlermeldung:"Diese Zeile gehört bereits zu dieser Tabelle."


    Me.MyTable.Rows.Add(newRow) setzt dieser Befehl mir nicht eine neue Zeile welche ich diese dann ausfüllen kann? Oder habe ich hier noch einen kpl. falschen Denkansatz zu dieser Geschichte.

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

    1. Vorsicht mit der Farbe Rot. Die ist nur für Moderatoren vorgesehen, siehe Boardregeln. Bitte ändern, bevor es einen Rüffel von den Mods gibt.

    § 3c der Boardregeln schrieb:

    Die Textfarbe "Rot" ist den Moderatoren vorbehalten! Damit ist vor allem die Farbe #FF0000 gemeint,
    aber auch ähnliche, die man damit verwechseln könnte.

    2. Wenn Du eine Zeile zu einer DataTable hinzufügen willst, dann kann das immer nur eine neue Row sein, die Du auch so erstellen musst, also z.B.:

    VB.NET-Quellcode

    1. Dim NewRow As Data.DataRow = Nothing
    2. For i = 1 To 3
    3. NewRow = New Data.DataRow 'jede weitere DataRow muss auch mit New erstellt werden, sonst ist es ja immer dieselbe Row, die man hinzufügen will, was dann als Fehler endet
    4. 'hier Eigenschaften der DataRow setzen
    5. Me.MyTable.Rows.Add(NewRow)
    6. Next
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    @VaporiZed Jou. Nö.
    @Waxweazle Eine Zeile für eine bestehende Tabelle wird aus der Tabelle generiert. In meinem Beispiel sah das so aus:

    VB.NET-Quellcode

    1. For i As Integer = 0 To 100
    2. Dim newRow As DataRow = Me.MyTable.NewRow() ' dies hier
    3. newRow(0) = i
    4. newRow(1) = Math.Sin(i / 10)
    5. Me.MyTable.Rows.Add(newRow)
    6. Next

    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    So habe mich jetzt nochmal dran gesetzt und es klappt erstmal. Bekomme jetzt die XML mit allen Daten geschrieben und mithilfe deines Druckbeispiel ausgedruckt. Berechnet wird alles soweit richtig. Habe mal eine XML/pdf an gehangen, mit einem Beispiel mit mehreren Profilen.
    Bin mir jetzt noch nicht ganz sicher, ob ich die Datatable optimal für meinen Fall eingesetzt habe. Für mich passt es, aber ist ja auch meine erster Versuch damit :)

    Was ich jetzt noch mir mal anschauen muss:
    - Habe jetzt mehrere Stäbe wo gleiche Profile heraus geschnitten werden und diese noch als einzelne angezeigt werden. Da weiß ich noch nicht genau, wie ich die zusammen fassen soll. Vielleicht kommt mir die Tage ja noch die Erleuchtung?
    - Druckausgabe habe ich jetzt deine mal übernommen, wird aber von mir noch bearbeitet. Ist jetzt nur zum testen.

    Ich möchte mich nochmal an alle dir mir Tipps gegeben haben bedanken, soweit wäre ich ohne euch nie gekommen.
    Dateien
    • data.xml

      (5,6 kB, 14 mal heruntergeladen, zuletzt: )
    • test.pdf

      (72,42 kB, 22 mal heruntergeladen, zuletzt: )

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

    @Waxweazle Die gedruckte Tabelle sieht für den Anfang ganz gut aus, die äußere Form kriegst Du auch noch hin. :thumbup:
    Kannst Du mal beschreiben, wie Du die XML generiert hast? Die ist eher suboptimal.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Habe mir schon gedacht, dass ich den Datatyp eventuell nicht optimal eingesetzt habe. Habe dir mal eine Skizze an gehangen, weil ich das doch so gut kann :) Da sieht man wie ich das Programm aufgebaut habe.

    Die Tabelle in der Druckausgabe gefällt mir eigentlich schon sehr gut. Im Grundzug wird es so schon bleiben.
    Bilder
    • Datatyp.jpg

      140,65 kB, 1.058×794, 19 mal angesehen
    @Waxweazle So ein Bild hatten wir schon. Ich meine die XML-Datei, den Code dafür.

    RodFromGermany schrieb:

    Kannst Du mal beschreiben, wie Du die XML generiert hast?
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. For i6 As Integer = 0 To 0
    2. Dim newRow As DataRow = Me.MyTable.NewRow()
    3. newRow(0) = istabnr
    4. newRow(1) = istabstk
    5. newRow(2) = Stablänge
    6. newRow(3) = istk
    7. newRow(4) = längstesprofil
    8. Me.MyTable.Rows.Add(newRow)
    9. Next
    @Waxweazle: Mit dem genannten Code wird eine DataTableRow erstellt und der DataTable hinzugefügt. Es geht um die Frage, mit welchem Code Du die DataTable in einer XML-Datei abspeicherst. Also irgendeine Daten-zu-Datei-Schreibfunktion.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    @VaporiZed DataTable hat eine .WriteXml()-Funktionalität. ;)
    @Waxweazle Hast Du die so abgespeichert? Sieht mir nicht so aus.
    Wie ist denn die Struktur Deiner Tabelle?
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    @RodFromGermany: Ich dachte mir schon, dass Du darauf hinaus willst, wollte aber waxzeazles Antwort nicht vorgreifen und Dir den Spaß verderben. Aber aufgrund der XML kann man wohl schlussfolgern, dass es waxweazle komplizierter macht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Ich und kompliziert ach iwo ;) Eher Unwissenheit und bissel ausprobieren :)

    VB.NET-Quellcode

    1. #Region "Datatable"
    2. Private MyTable As Data.DataTable
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. dgv_Tabelle.AllowUserToAddRows = False ' Für Testzwecke
    5. PrintDoc.DefaultPageSettings.Landscape = Not Querformat
    6. Me.MyTable = Me.InitDataTable()
    7. Me.InitData()
    8. End Sub
    9. Private Function InitDataTable() As Data.DataTable
    10. Dim Table = New Data.DataTable("TestDaten")
    11. Table.Columns.Add(New DataColumn("Stabnummer", GetType(Integer)))
    12. Table.Columns.Add(New DataColumn("Stabstück", GetType(Integer)))
    13. Table.Columns.Add(New DataColumn("Stablänge", GetType(Integer)))
    14. Table.Columns.Add(New DataColumn("Einzelprofilstück", GetType(Integer)))
    15. Table.Columns.Add(New DataColumn("Einzelprofillänge", GetType(Double)))
    16. Table.Columns.Add(New DataColumn("restprofillänge", GetType(Double)))
    17. Return Table
    18. End Function
    19. Private Sub InitData()
    20. ' DataSource löschen
    21. Me.MyTable.Clear()
    22. Me.dgv_Tabelle.DataSource = Nothing
    23. End Sub
    24. #End Region


    Speichern tu ich Quasi dreimal:

    VB.NET-Quellcode

    1. For i6 As Integer = 0 To 0
    2. Dim newRow As DataRow = Me.MyTable.NewRow()
    3. newRow(0) = istabnr
    4. newRow(1) = istabstk
    5. newRow(2) = Stablänge
    6. newRow(3) = istk
    7. newRow(4) = längstesprofil
    8. Me.MyTable.Rows.Add(newRow)
    9. Next


    Dann kommt die Schleife wo nächstes Profil berechnet wird

    VB.NET-Quellcode

    1. For i6 As Integer = 0 To 0
    2. Dim newRow As DataRow = Me.MyTable.NewRow()
    3. newRow(3) = istk2
    4. newRow(4) = minl
    5. Me.MyTable.Rows.Add(newRow)
    6. Next


    Dann wird solange gerechnet bis fertig

    VB.NET-Quellcode

    1. For i6 As Integer = 0 To 0
    2. Dim newRow As DataRow = Me.MyTable.NewRow()
    3. newRow(5) = Math.Round(p, 1)
    4. Me.MyTable.Rows.Add(newRow)
    5. Exit For
    6. Next

    RodFromGermany schrieb:

    Kannst Du mal beschreiben, wie Du die XML generiert hast?


    VaporiZed schrieb:

    Es geht um die Frage, mit welchem Code Du die DataTable in einer XML-Datei abspeicherst. Also irgendeine Daten-zu-Datei-Schreibfunktion.


    ...ich geb auf...
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    @VaporiZed Ich habs nachempfunden.
    @Waxweazle Das ganze ist etwas suboptimal. Zu viele leere Zellen, befüllte Zellen nur in der letzten Spalte.
    Du musst Deinen Datensatz so aufbauen, dass er in eine Zeile passt.
    Eine Stange kommt dann in eine Zeile.
    So z.B.:

    Quellcode

    1. Nummer
    2. Stück
    3. Länge
    4. Anzahl von 900
    5. Anzahl von 700
    6. Anzahl von 500
    7. Anzahl von 400
    8. Anzahl von 200
    9. Reatlänge
    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).
    VB-Fragen über PN / Konversation werden ignoriert!