Auto Insert Tool

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von TS71M.

    Auto Insert Tool

    Folgendes Problem:
    Ich hab eine Tabelle (pic 1) in der man mit Hilfe einer anderen Form (pic 3) automatisch Werte eintragen lassen kann.
    Das AutoInsert sieht so aus:

    VB.NET-Quellcode

    1. Private Sub Insert()
    2. Dim StartWeek As Integer = GetKW(dtpStart.Value)
    3. Dim EndWeek As Integer = GetKW(dtpEnd.Value)
    4. Dim StartDate As Date = dtpStart.Value
    5. Dim CurrentRw = fmAppPlan.AppPlanBindingSource.At(Of AppPlanRow)()
    6. Select Case rbEndsAfter.Checked
    7. Case True
    8. Select Case rbDays.Checked
    9. Case True 'days
    10. EndWeek = GetKW(dtpStart.Value.AddDays((nudApps.Value - 1) * nudPeriod.Value))
    11. For i = StartWeek - 1 To EndWeek Step CInt(nudPeriod.Value / 7)
    12. CurrentRw(i + 22) = nudRate.Value
    13. Next
    14. Case False 'weeks
    15. For i = StartWeek - 1 To EndWeek Step CInt(nudPeriod.Value)
    16. CurrentRw(i + 22) = nudRate.Value
    17. Next
    18. End Select
    19. Case False
    20. Select Case rbDays.Checked
    21. Case True 'days
    22. For i = StartWeek - 1 To EndWeek Step CInt(nudPeriod.Value / 7)
    23. CurrentRw(i + 22) = nudRate.Value
    24. Next
    25. Case False 'weeks
    26. For i = StartWeek - 1 To EndWeek Step CInt(nudPeriod.Value)
    27. CurrentRw(i + 22) = nudRate.Value
    28. Next
    29. End Select
    30. End Select
    31. End Sub

    Soweit so gut. Die Werte werden eingetragen (pic 2). Doch sobald ich die Werte speichern will, schmeisst er mir "nur" die automatisch eingetragenen raus (pic 4). Werte die ich direkt eingetragen habe, bleiben und werden gespeichert.

    Irgendeine Idee?

    Mein Save ist:

    VB.NET-Quellcode

    1. Me.Validate()
    2. Media.SystemSounds.Exclamation.Play()
    3. Me.AppPlanBindingSource.EndEdit()
    4. Me.TableAdapterManager.UpdateAll(Me.AMSDataSet)
    Bilder
    • Screenshot 2014-02-25 20.28.37.png

      20,58 kB, 988×409, 134 mal angesehen
    • Screenshot 2014-02-25 20.30.30.png

      21,04 kB, 990×429, 113 mal angesehen
    • Screenshot 2014-02-25 20.33.33.png

      10,41 kB, 623×327, 122 mal angesehen
    • Screenshot 2014-02-25 20.30.39.png

      21,41 kB, 985×432, 104 mal angesehen
    und welches erste Fenster muss nun die Einträge welchen 2. Fensters akzeptieren oder kennen?
    Einträge worein? Ins Form (und wenn ja, welches?) oder in die DB?

    Generell ists einfach Mist, wenn 2 Forms Einträge in die DB vornehmen. Da weiß die eine nicht was die annere tut.
    Hast du Post 1 gelesen, oder nur Bildle geguggt ;)

    - In der ersten Form mit typisiertem DataSet gebunden an ein DataGridView gibt es eine "Button"-Spalte (Auto). (Bild 1).
    - Wenn man auf diese Button klickt öffnet sich ein Fenster (Bild 3).
    - Dort gibt man ein wieviel, von wann bis wann, oder wie oft und in welchen zeitlichen Abständen man Werte eingetragen haben möchte.
    - Dann klickt man auf den "Insert" Button (Bild 3) und die Werte werden entsprechend obiger Einstellungen eingetragen. (funktioniert!)
    - Dann schliesse ich diese Form wieder. Die Werte werden alle in der Tabelle angezeigt (Bild 2).
    - Wenn ich dann auf der ersten Form auf "Save" klicke schmeisst er mir ohne Fehlermeldung alle Werte wieder raus (Bild 4).

    Verständlicher?

    Generell ists einfach Mist, wenn 2 Forms Einträge in die DB vornehmen. Da weiß die eine nicht was die annere tut.


    Möchtest du mir damit ernsthaft sagen, dass ich ins DataGridView schreiben soll?
    Man könnte doch das eine Form "blocken" oder inaktiv setzen, während das Andere offen ist?

    TS71M schrieb:

    Allerdings muss es schon irgendwie mit der 2. Form zu tun haben, da Werte, die ich direkt ins 1. Form schreibe, korrekt gespeichert werden.
    ja, das ist schon abartig, und sollteste korrigieren, aber ich kann nicht erkennen, warum sich die in currentRow gesetzten werte selbst wieder rauslöschen sollten.
    Aber auch das Form2 kannste ja mal weglassen, und schreibst einfach direkt was in die Currentrow, ob das auch wieder verschwindet.
    Also, wir kommen der Sache näher.
    Das Problem ist nicht die Verbindung, sondern das "," (Komma). Also bei ganzen Zahlen funktioniert alles einwandfrei. Nur wenn ich Kommazahlen eingebe fliegen alle Zahlen raus.
    Die Eingabe erfolgt über ein NumericUpDown Feld.
    Ich habe bereits:

    VB.NET-Quellcode

    1. CurrentRw(i + 22) = CDec(nudRate.Value)

    Probiert, aber das ergebnis ist leider das Gleiche. Ich denke das es mal wieder das Problem ist, das wir Deutschen Komma verwenden und das Programm aber lieber einen Punkt hätte.
    @TS71M:: NumericUpDown liefert doch ein Decimal.
    Was geht hier nicht:

    VB.NET-Quellcode

    1. Private Sub NumericUpDown1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles NumericUpDown1.ValueChanged
    2. Dim val = Me.NumericUpDown1.Value
    3. Label1.Text = val.ToString
    4. End Sub
    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!
    Wie bereits oben erwähnt. Es werden die Werte eingetragen und sobald ich speichere schmeisst er sie raus. Bei Ganzzahlen funktionierts, bei Komma nicht.

    Ich muss mich entschuldigen :whistling: .... das Problem ist ein ganz anderes. Ich bin nur leider erst jetzt drauf gekommen.

    Sowohl in der Datenbank, als auch im DataSet Designer sind die Spalten als Decimal gekennzeichnet. Er lässt mich auch Kommazahlen ohne zu meckern eintragen. Nur beim Speichern schneidet er die Kommawerte einfach ab.
    Beispiel: Ich trage 5,72 ein, speichern, danach ändert er den Wert auf 5,00

    Wenn ich 5.70 eintrage, ändert er es auf 57,00

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

    ersetzte , durch .
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @TS71M:: Setz mal einen Haltepunkt drauf und verfolge die Konvertierung, sofern deren Code für Dich zugänglich ist.
    Möglicherweise ist da iwo ein falscher Datentyp zwischengeschaltet (ggf. String), das solltest Du dann korrigieren.
    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!
    wieso nicht zufriedenstellend?
    Natürlich muss das Datenmodell vom Datentyp her für die Verarbeitung der Werte geeignet sein, sonst gibts Ärger. Und die Korrektur ist demnach auch die richtige Lösung :thumbsup:

    Pech war für dich, dass du keine vernünftige exception bekommen hast, so haste dich glaub 2 Tage damit abgemüht, was eine Exception dir vmtl. gleich gesagt hätte (naja, um die zu verstehen brauchts oft auch Stunden, aber keine Tage). Hast du beim Speichern iwo einen TryCatch verbaut, der dir die Exceptions wegfängt?

    Auch komisch ist, dass nicht bereits das DGV den Fehler bemeckert. Eigentlich hätten die Datentypen der generierten DGVColumns beim Databinding sich auf Integer einstellen müssen, und dann auch schreien, wenn du ',' eingibst.
    Oder hast du das Grid garnet im Designer gebunden?

    Auch komisch ist, dass die DataRow nicht schreit, wenn ihr in ihre Spalten ungeeignete Werte zugewiesen werden.

    welchen laufzeitTypen zeigt tp an, wenn du sowas machst:

    VB.NET-Quellcode

    1. dim tp = myDataset.AppPlan.Columns(25).DataType

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

    Nein, gar nix. Meiner Meinung war das Datenmodell in Ordnung. Decimal sowohl in der Sql Datenbank, als auch im Designer. Nur irgendwie will er das nicht so, und kappt mal die Nachkommawerte...

    Ich bin einfach zu spät darauf gekommen, dass er die Kommawerte abschneidet.

    "Nicht zufriedenstellend" finde ich, dass es mit Double geht und mit Decimal nicht??? Da soll mal einer drauf kommen.

    welchen laufzeitTypen zeigt tp an, wenn du sowas machst:


    tp = {Name = "Decimal" FullName = "System.Decimal"}

    Anscheinend kann SQL Decimal nicht mit VB Decimal

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