DataSet wird nicht aktualisiert

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ludl8615.

    DataSet wird nicht aktualisiert

    Hallo,

    Ich habe wiedermal ein Problem mit meinem DataSet in Verbindung mit einem DGV. Wie im Screenshot zu sehen, sind schon Daten hinterlegt, bzw werden Daten von einer anderen DataSet (je nach Versuchseigenschaften) in "ProjektDS" kopiert. An sich funktioniert die Geschichte wunderbar. Die Messung verläuft ohne probleme, dh das Databinding zwischen DGV und ProjektDS macht eigentlich keine Probleme. Aber, zu den Gewichten - die hier nach Farben benannt wurden - wurde noch eine Masse hinterlegt. Die Summe der Massen soll unten angezeigt werden, abhängig von der Markierten Zeile in den Laststufen (LS1 - LS10).
    Also wenn LS3 markiert wurde, sollen die Massen der Gewichte in LS1, LS2 & LS3 addiert werden, was nach dem ersten Füllen auch ohne Probleme funktioniert. Wenn ich aber "manuell" Daten in der DGV ändere, dann tauchen diese scheinbar nicht in der DataSet auf und werden somit nicht addiert.
    Wenn man ein Gewicht löscht, wird es tatsächlich auch gelöscht. Nur beim "manuell" hinzufügen passiert nichts.

    Allerdings - wie schon erwähnt - wenn ich die Messung Starte, werden auch die manuell hinzugefügten Gewichte hinzugefügt und berücksichtigt.


    Hier der code der Berechnung:

    Quellcode

    1. Private Sub Auflastrechner()
    2. Dim SummeLast As Double = 0, LS_last As Double = 0, Flaeche As Double, G_ID As Integer, bFlag As Boolean = False
    3. Dim Zell = Standard.Zelle.FindByID(cbZelle.SelectedValue)
    4. Flaeche = Zell.Flaeche
    5. Dim LaststRow As ProjektDS.ProjLaststufenRow
    6. Try
    7. LaststRow = DirectCast(DirectCast(ProjLaststufenBindingSource(ProjLaststufenBindingSource.Position), DataRowView).Row, ProjektDS.ProjLaststufenRow)
    8. For Each LS_GewichteRow As ProjektDS.ProjLS_ProjGewichteRow In ProjektDS.ProjLS_ProjGewichte
    9. If bFlag = True And LS_GewichteRow.LS_ID <> LaststRow.ID Then
    10. Exit For
    11. End If
    12. For Each GewichteRow As ProjektDS.ProjGewichteRow In ProjektDS.ProjGewichte
    13. If LS_GewichteRow.G_ID = GewichteRow.ID Then
    14. SummeLast = SummeLast + GewichteRow.Kraft
    15. End If
    16. Next
    17. If LS_GewichteRow.LS_ID = LaststRow.ID Then ' Wenn markierte RowID erreicht
    18. bFlag = True
    19. End If
    20. Next
    21. LS_FLastTBox.Text = Math.Round((LS_last * 0.001 * dHebel) / Flaeche, 6)
    22. Gesamt_FLastTBox.Text = Math.Round((SummeLast * 0.001 * dHebel) / Flaeche, 6)
    23. Catch ex As Exception
    24. MsgBox("Keine Laststufen für die Zelle: """ & Standard.Zelle.FindByID(cbZelle.SelectedValue).Name.ToString & """ angelegt.", MsgBoxStyle.Critical, "Laststufen anlegen!")
    25. End Try
    26. End Sub



    Bild "Kompression1.0" zeigt den Zustand direkt nach dem Befüllen, wobei sich die Gesamt-Auflast (eingekreist) die Summe von "Rot" und "Grün" ist, da LS1 markiert ist.
    Bild "Kompression1.1" zeigt die Berechnung von LS1 bis LS10, also alle Gewichte aufsummiert.
    Bild "Kompression2.0" zeigt den Zustand wenn ich ein Gewicht hinzufüge (keine änderung der Auflast im Vergleich zu Bild "Kompression1.0").
    Bild "Kompression1.0" zeigt den Zustand wenn Gewichte gelöscht werden (Auflast ändert sich im Vergleich zu Bild "Kompression1.0").

    Könnt ihr mir sagen wo da das Problem liegt??

    Danke!!
    Bilder
    • DataBinding.JPG

      77,7 kB, 930×626, 132 mal angesehen
    • Kompression1.0.JPG

      63,01 kB, 708×445, 133 mal angesehen
    • Kompression1.1.JPG

      69,63 kB, 730×494, 133 mal angesehen
    • Kompression2.0.JPG

      43,17 kB, 389×476, 122 mal angesehen
    • Kompression2.1.JPG

      38,52 kB, 395×457, 134 mal angesehen
    • ProjektDS.JPG

      42,43 kB, 619×443, 127 mal angesehen

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

    ludl8615 schrieb:

    Könnt ihr mir sagen wo da das Problem liegt??
    Ich nehme an, die Berechnungs-Methode wird nicht automatisch aufgerufen, wenn manuell ein Gewicht zugefügt wurde.

    Ich empfehle dir übrigens berechnete Spalten im Dataset zu verwenden. Dann kannst du das Label an die berechnete Spalte binden und brauchst dich ums Updaten nach jeglicher Daten-Änderung nicht mehr zu kümmern.
    Ich nehme an, die Berechnungs-Methode wird nicht automatisch aufgerufen, wenn manuell ein Gewicht zugefügt wurde.
    Ja nicht direkt automatisch, sondern mit:

    Quellcode

    1. Private Sub GewichteDGV_Change(sender As Object, e As DataGridViewCellEventArgs) Handles ProjLS_ProjGewichteDataGridView.CellClick

    Und

    Quellcode

    1. Private Sub ProjLaststufenDGV_Change(sender As Object, e As DataGridViewCellEventArgs) Handles ProjLaststufenDataGridView.CellClick

    Nicht sehr elegant, ich weis... Aber bisher hat es seinen Job getan.



    Ich empfehle dir übrigens berechnete Spalten im Dataset zu verwenden.

    Das ist ja eine geschmeidige Variante! Das hätte mir schon an anderen Stellen eine menge Aufwand erspart!! :thumbup:
    Bastel aber schon wieder den ganzen Morgen daran herum und komme nicht ganz weiter.

    Versuch1(screenshot):

    Quellcode

    1. parent(FK_ProjGewichte_ProjLS_ProjGewichte).Kraft

    gibt keine Fehlermeldung. Da ich aber die Summe brauche, macht das ja so keinen Sinn.
    Also:

    Quellcode

    1. isnull(Sum(parent(FK_ProjGewichte_ProjLS_ProjGewichte).Kraft),0)

    das wiederum führt zu Fehler "Fehlermeldung"(screenshot).

    Versuch2 ging dann über mehrere Tabellen, aber da komm ich auf keinen grünen Zweig!

    Vielen Dank für deine Hilfe!!!!!!!
    Bilder
    • Fehlermeldung.JPG

      25,26 kB, 335×248, 120 mal angesehen
    • Versuch1.JPG

      97,65 kB, 1.408×498, 124 mal angesehen
    • Versuch2.JPG

      88,19 kB, 1.263×530, 131 mal angesehen
    das sind ja schon sehr ausgebuffte Expressions, die du da entwickelst - mit welcher Expression läufts denn nun?

    Übrigens schreibe ich meine Expressions immer in Notepad, und kopiere meine Versuche dann in den Dataset-Designer ein.
    Weil das kotzt mich an, dass bei jedem Fehler der ganze mühsam hingekritzelte Ausdruck gelöscht wird, und man bei 0 wieder anfangen darf.
    (aber vmtl. biste da auch selbst drauf gekommen)
    Also, mein Ansatz und das Ergebnis ist auf den Screenshots zu sehen. Jetzt müsste ich nur noch die Auflast der einzelnen Laststufen (LS1 - LS10), bis zur markierten aufsummieren und wäre da wo ich hin wollte. Da ich aber gestern mit dem Chef über den Status gesprochen habe, darf ich jetzt alles nochmal über den Haufen werfen.

    Nun soll in der Tabelle der Laststufen (LS1 - LS10) aufsummiert werden.
    Das bedeutet, die jetzigen Ergebnisse in der LS DGV nacheinander aufaddieren und in eine neue Spalte schreiben.
    Somit steht in der ersten Zeile (LS1) das Ergebnis von LS1. In der Zweiten Zeile (LS2) das Ergebnis von LS1 + LS2. In der Dritten LS1 + LS2 + LS3 usw.
    Wie ich das jetzt umsetzen soll ist mir noch ein Rätsel!?!! ?(

    Langsam Nerven die Sonderwünsche und ständigen Meinungsänderungen. Was dadurch schon Zeit und Arbeit ins Land ging... <X


    ErfinderDesRades schrieb:

    Übrigens schreibe ich meine Expressions immer in Notepad, und kopiere meine Versuche dann in den Dataset-Designer ein.
    Weil das kotzt mich an, dass bei jedem Fehler der ganze mühsam hingekritzelte Ausdruck gelöscht wird, und man bei 0 wieder anfangen darf.
    (aber vmtl. biste da auch selbst drauf gekommen)

    MeToo


    Bilder
    • Neu1.JPG

      155,52 kB, 1.280×606, 121 mal angesehen
    • Neu2.JPG

      153,63 kB, 1.333×585, 124 mal angesehen
    • Ergebnis.JPG

      43,56 kB, 451×372, 123 mal angesehen

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

    Typisch. Vielleicht VOR Programmierung ein bischene schriftlich niederlegen Stichwort "Pflichtenheft"

    Das Programm begann als kleines Versuchsprogramm während meines Studiums. Da hatte ich noch nicht mit diesem Umfang gerechnet. Aktuell sitze ich auch an einem Protokoll des gestrigen Gesprächs und lass mir nachher unterschreiben, dass damit alles in dieser Hinsicht geklärt wurde. Sonst führt das noch zu akutem Schlafmangel.

    Für das nächste hab ich schon mit einer schriftlichen Planung begonnen und lass mir auch vor Beginn unterschreiben das alles geklärt ist...
    Ich bin da vergleichsweise nachsichtig, was ständig sich ändernde Sonderwünsche angeht.
    Nach meiner Erfahrung ists nahezu unmöglich, am Anfang eines Projektes die Anforderungen vollständig zu fixieren.

    Ist imo meist auch nicht sinnvoll, weil manchmal tun sich einem während der Entwicklung ganz neue und viel einfachere Lösungswege auf. Oder andersrum zeigen sich einfach erscheinende Anforderungen als nicht mit vertretbarem Aufwand lösbar.
    Also in unserem Team (inkl. Cheffe) ist das auch ein Wechselspiel, wo jede Partei gelegentlich Bedarf hat, das AnforderungsProfil gemeinsam zu revisionieren.
    Jo, ist sehr aufwändig, und jede Nachbesserung kostet. Aber frühe nachbesserungen sind immer noch die billigeren (und mir eh gleich, ich werd nach Stunden bezahlt).

    Deshalb heisst auch "Entwicklung", und ich bin "Entwickler" und nicht "Planwirtschaftler".

    ErfinderDesRades schrieb:

    und ich bin "Entwickler" und nicht "Planwirtschaftler"
    Wohl war. Aber als Einzelkämpfer mit Pauschalverträgen macht es grossen Sinn, den zu liefernden Leustungsumfang möglichst umfassend festzulegen, Sonst weinen die Kinderlein am Monatsende, weil Papa kein Geld für ein neues Iphone verdient hat (oder so).

    ErfinderDesRades schrieb:

    Deshalb heisst auch "Entwicklung", und ich bin "Entwickler" und nicht "Planwirtschaftler".

    Ja Prinzipiell ist das schon richtig so. Wenn es Sinnvolle Änderungen sind, bei denen man nicht schon seit Wochen seine Bedenken äußert, ist das ja alles vollkommen in Ordnung.

    Aber wenn ich mich an den Plan anderer halten muss, nur damit der Gedanke dazu nicht umsonst war, drei Wochen später aber alles ganz anders ausschaut, wieder umgebaut werden muss und so getan wird als wäre es meinem Gedankengut entsprungen, kann das schon Nerven kosten. Zusätzlich wird dann gerne auch mal auf andere Projekte aufmerksam gemacht, ganz nach dem Motto "Du musst langsam mal zu Potte kommen, wir haben noch andere Projekte". Ich bin der einzige Entwickler in unserer Firma, hab nur einen Kopf und (in meinem Fall) nur neun Finger.

    Deshalb werden Gespräche ab jetzt protokolliert und von Anfang an Projektdokumentation geführt. Ich möchte nicht jedesmal meinen Kopf hinhalten, nur weil andere nicht mehr wissen wie sie entschieden hatten.


    Aber wollen wir mal beim Thema bleiben...

    @ErfinderDesRades
    Es gibt wahrscheinlich keine triviale Möglichkeit, mittels Expressions, auf eine Zahl in einer Zeile die vorherige aufzuaddieren?

    Vielen Dank schon mal!!!

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

    Also, hat sich jetzt eigentlich geklärt!

    Mit dem Ansatz aus Antwort #6, einer zusätzlichen column im Dataset mit dem Namen "SumLaststufen", lass ich die Werte mit den Folgenden Schleife berechnen:

    Quellcode

    1. For Each SummeRow As ProjektDS.ProjLaststufenRow In ProjektDS.ProjLaststufen
    2. SummeLaststufe = SummeLaststufe + SummeRow.SumAuflast
    3. SummeRow.SumLaststufen = Math.Round(SummeLaststufe, 4)
    4. Next



    Funktioniert wunderbar!!

    @ErfinderDesRades hast mir wiedermal bestens auf die Sprünge geholfen! Vielen Dank dafür. :thumbup:
    Ich denke die Thema kann als Erledigt angesehen werden!
    Bilder
    • Dataset.JPG

      54,94 kB, 887×481, 111 mal angesehen
    • Ergebn1.JPG

      72,02 kB, 723×494, 115 mal angesehen