Plötzlich Werte in ComboBoxen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von GünterD.

    Plötzlich Werte in ComboBoxen

    Hallo Zusammen,

    sitze vor einem Rätsel, für dass ich einen Tipp brauche.

    Ich füge in einer BDS einen neuen Datensatz ein.
    Wenn ich nach dem Einfügen und speichern ein ME.UPDATE des Forms mache tauchen Werte in gebundenen Comboboxen des Forms auf.
    Müssten die nicht alle leer sein?

    Hier mein Code

    VB.NET-Quellcode

    1. Private Sub ArtikelNeu_Click(sender As Object, e As EventArgs) Handles ArtikelNeu.Click
    2. Dim drv As DataRowView = DirectCast(Tbl_ArtikelStammdatenBindingSource.AddNew(), DataRowView)
    3. drv.BeginEdit()
    4. drv.Row.BeginEdit()
    5. drv.Row("ArtikelNr") = "NEU"
    6. drv.Row.EndEdit()
    7. drv.DataView.Table.Rows.Add(drv.Row)
    8. Me.Validate()
    9. Me.SuspendLayout()
    10. Me.Tbl_ArtikelStammdatenBindingSource.EndEdit()
    11. Me.Tbl_ArtikelKundenBindingSource.EndEdit()
    12. Me.Tbl_ArtikelAGMerkmaleBindingSource1.EndEdit()
    13. Me.Tbl_ArtikelAGsBindingSource.EndEdit()
    14. Me.Tbl_ArtikelNormenBindingSource.EndEdit()
    15. Me.TableAdapterManager.UpdateAll(Me.TechDBDataSet)
    16. Me.TechDBDataSet.AcceptChanges()
    17. Me.Update() ' <-- danach tauchen die cmb-Werte auf
    18. End Sub


    Schaue ich mit in der SQL-Tabelle nach dem "UpdateAll" den neun Datensatz an, stehen in den mit den cmb verbundenen Felder/Spalten keine Werte!

    Gruß Günter
    Gruß Günter
    Ist die betroffene ComboBox per DataBinding mit der BS verbunden? Dabei solltest Du beachten, dass es sowohl das komplexe als auch das einfache DataBinding gibt.
    Bilder
    • DataBinding.png

      47,84 kB, 792×525, 61 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich habe die "Komplexe" siehe Anlage

    Es gibt eine 1:n-Beziehung zwischen "Datenquelle" und "Ausgewählter Wert".
    Bilder
    • komplex.jpg

      72,06 kB, 305×267, 53 mal angesehen
    • 1-n.jpg

      166,82 kB, 612×596, 56 mal angesehen
    Gruß Günter

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „GünterD“ ()

    Nun gut, die ComboBox ist über die BS an die Tabelle Tbl_ArtikelStammdaten gebunden. Wenn sich da was ändert, ändert sich letztenendes auch was in der ComboBox. Ich versteh gerade nicht, was das Problem ist. Tauchen denn darin Werte auf, die nicht in der DB enthalten sind?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ja, grundsätzlich hast du recht.
    Aber … in den gebundenen cmb-Datenfelder steht in der SQL-Tabelle "NULL".
    Also wo werden die Werte, nach dem "Me.Update" in den cmb auftauchen, hergeholt?

    Vergesse ich vielleicht irgendetwas zurückzusetzen?
    Gruß Günter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „GünterD“ ()

    zunächst mal diese Code

    VB.NET-Quellcode

    1. Private Sub ArtikelNeu_Click(sender As Object, e As EventArgs) Handles ArtikelNeu.Click
    2. Dim drv As DataRowView = DirectCast(Tbl_ArtikelStammdatenBindingSource.AddNew(), DataRowView)
    3. drv.BeginEdit()
    4. drv.Row.BeginEdit()
    5. drv.Row("ArtikelNr") = "NEU"
    6. drv.Row.EndEdit()
    7. drv.DataView.Table.Rows.Add(drv.Row)
    8. Me.Validate()
    9. Me.SuspendLayout()
    10. Me.Tbl_ArtikelStammdatenBindingSource.EndEdit()
    11. Me.Tbl_ArtikelKundenBindingSource.EndEdit()
    12. Me.Tbl_ArtikelAGMerkmaleBindingSource1.EndEdit()
    13. Me.Tbl_ArtikelAGsBindingSource.EndEdit()
    14. Me.Tbl_ArtikelNormenBindingSource.EndEdit()
    15. Me.TableAdapterManager.UpdateAll(Me.TechDBDataSet)
    16. Me.TechDBDataSet.AcceptChanges()
    17. Me.Update() ' <-- danach tauchen die cmb-Werte auf
    18. End Sub
    is böse, weil untypisiert und überverkomplizifiliziwisiert.

    Einfacher sollte sein:

    VB.NET-Quellcode

    1. Private Sub ArtikelNeu_Click(sender As Object, e As EventArgs) Handles ArtikelNeu.Click
    2. Dim rwArtikel = DirectCast(DirectCast(Tbl_ArtikelStammdatenBindingSource.AddNew(), DataRowView).Row, Tbl_ArtikelStammdatenRow)
    3. rwArtikel.ArtikelNr = "NEU" ' <-- danach tauchen die cmb-Werte auf
    4. Tbl_ArtikelStammdatenBindingSource.EndEdit
    5. Me.TableAdapterManager.UpdateAll(Me.TechDBDataSet)
    6. 'Me.TechDBDataSet.AcceptChanges() ' <-- unnötig
    7. 'Me.Update() ' <-- unnötig
    8. End Sub
    Ist natürlich ungetestet, aber probierma.
    Ob das das Problem mit den verschwundenen Daten inne DB löst weiss ich nicht.
    Ich weiss auch nicht, wie "mit der Combobox verbundene Daten" definiert ist - ist damit die hier im Code neu zugefügte Tbl_ArtikelStammdatenRow (was ein fürchterlicher Name!) gemeint?
    @EDS,

    dein Code funktioniert wie mein Vorheriger.
    Mache ich das "unnötige" Me-Update trotzdem wieder rein, tauchen in den cmb's wieder Werte.
    In den Feldern des zugehörigen MSSQL-Datensatzes steht aber "NULL"!!!

    Was verstehe ich hier nicht?

    Hier ein Beispiel für eine cmb-Verbindungen.
    Bilder
    • cmb-Binding.jpg

      184,41 kB, 670×514, 50 mal angesehen
    Gruß Günter
    Gegenfrage: Sind denn die Werte, die auftauchen plausible bzw. grundsätzlich in der Datenbank vorhanden?

    btw: wieso eigentlich @EDS? Wenn, dann @EdR
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Die Werte, die dort auftauchen sind in den Schlüssel-Tabellen vorhanden.
    In dem Datensatz der untergeordneten Tabelle, den ich ja neu eingefügt habe aber nicht.

    Ich glaube, ich komme dem Problem näher.
    Ich habe jetzt einfach den bs-Feldern vor dem Speichern "Nothing" zugewiesen und dann kommt folgender Fehler.
    Wenn ich eine ID der Schlüssel-Tabelle zuweisen läufts durch. Aber genau dies soll der User später machen können.

    Woran hängt es?
    Ich dachte, dass bei Verbindungen zwischen Schlüssel-Tabelle und untergeordneter Tabelle in der untergeordneten Tabelle auch NULL zulässig ist.
    Bilder
    • Nothing.jpg

      174,64 kB, 945×371, 43 mal angesehen
    Gruß Günter
    Moment. Da steht in Deinem Post#3-Screenshot: Jeder Artikel hat nen Betreuer. -> Ein Artikel kann nicht ohne Betreuer existieren. Wenn keiner angegeben wird, wird (vermutlich) die 1. Zeile der Betreuerliste (= der 1. Betreuer) als Standard hergenommen. Wenn der Betreuer auf Nothing gesetzt wird, knallt's (zurecht).
    Ich bevorzuge ja die explizite Schreibweise, da kann solch eine Verwirrung nicht passieren. Direkt in der Table eine neue Zeile erstellen:

    VB.NET-Quellcode

    1. DeinDataSet.Tbl_ArtikelStammdaten.AddTbl_ArtikelStammdatenRow(*)
    * hier alle Parameter, die IntelliSense fordert; Achtung! Es gibt immer min. 2 Add-Funktionen. Die mit Tbl_ArtikelStammdatenRow erstmal nicht verwenden!
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.