Code durch ListboxItem in Datasetzugriff ersetzen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von HansiB.

    Code durch ListboxItem in Datasetzugriff ersetzen

    Entschuldigung, absolut neu in VB und habe meine Frage schon hier bzw. in Google erfolglos gesucht:

    Folgendes Problem:

    Ich möchte in einer Tabelle MyTabelleTB (aus der Access-Datenbank MyDB) die SpalteB im i.ten-Datensatz mit dem Inhalt von Textbox1 ersetzen. So funktioniert es:
    MyDBDataSet.MyTabelleTb(i).SpalteB = TextBox1.Text

    Aber nun möchte ich die Spalte durch einen ausgewählten Listbox-Eintrag auswählen.
    z.B. Wähle ich in der Listbox den Eintrag VORNAME aus, dann müsste der DB-Zugriff
    MyDBDataSet.MyTabelleTb(i).VORNAME = TextBox1.Text
    heissen.


    So hat es jedenfalls nicht geklappt:
    MyDBDataSet.MyTabelleTb(i).ListBox1.SelectedItem = TextBox1.Text
    oder auch so nicht:


    MyDBDataSet.MyTabelleTb(i).(ListBox1.SelectedItem.ToString) = TextBox1.Text

    Aber wie geht das??? Beziehungsweise, wo wurde dieses Thema (sicher) schon behandelt?

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

    Willkommen im Forum. :thumbup:
    Mir scheint, Du hast Schwierigkeiten, Quelle und Ziel auseinander zu halten.
    Links neben dem Gleichheitszeichen steht das Ziel:
    MyDBDataSet.MyTabelleTb(i).DER_NAME_IN_DEINER_DB =
    und rechts die Quelle:
    = TextBox1.Text
    Natürlich kannst Du als Ziel nur Spaltennamen verewensden, die es auch gibt.
    Und
    Du kannst als Quelle nur existierende Objekte verwenden.
    -------
    Mach eine kleine Übung:
    Weise der Textbox ein Item Deiner Listbox zu:

    VB.NET-Quellcode

    1. TextBox1.Text = ListBox1.Items.Item(2).ToString

    -----
    Wenn das klappt, kannst Du beliebige vorhandene Items Deiner DB zuweisen.
    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!
    das geht nicht.
    jedenfalls nicht mit den typisierten Datarows aus MyTabelle, die ansonsten ja ganz fabelhaft sind.

    es ist auch prinzipiell unsauberes Coden, denn die Sprache VB.Net sieht vor, dass im ProgrammCode festgelegt wird, welcher Eigenschaft was zugewiesen wird, nicht zur Laufzeit.
    Bei was du vorhast, könnte ja leicht geschehen, dass du der Gehalt-Property einen Nachnamen zuweist, und dann stürztes Programm sicher ab.
    ErfinderDesRades hat vermutlich recht

    RodFromGermany hat mich nicht verstanden: klar: Links neben dem Gleichheitszeichen steht das Ziel

    aber das Ziel will ich erst durch die Auswahl mit der Listbox genau festlegen.

    In der Listbox stehen als Item die Namen der Tabellenspalten

    z.B. wähle ich eine Spalte Zaehler1 oder Spalte Zaehler2 und setzte sie dann per Button-Klick alle auf Null.

    aber vermutlich hat der ErfinderDesRades recht, es sei denn ich kriege hier noch eine andere Antwort.
    naja, man kanns hacken, indem man die typisierte DataRow MyDBDataSet.MyTabelleTb(i) untypisiert verwendet:

    VB.NET-Quellcode

    1. Private columnNames as String()={"SpalteA","SpalteB","SpalteC"}
    2. '...
    3. Listbox1.DataSource=columnNames
    4. '...
    5. MyDBDataSet.MyTabelleTb(i)(columnNames(Listbox1.SelectedIndex)) = Textbox1.Text
    Wie gesagt: das funzt nur, wenn die angegebenen Spalten auch existieren, und als .DataType String haben.