Spaltenwert aus Dataset suchen OHNE Valuemember

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Spaltenwert aus Dataset suchen OHNE Valuemember

    Hallo,

    ich fülle eine Combobox mit Werten eines Dataset und nutze dazu Displaymember und Valuemember. Wenn ein Eintrag aus der Combobox ausgewählt wird, zeigt mir ein Label auch richtig den dazugehörigen Valuewert an.
    Nun gibt es aber noch eine weitere Spalte in dem Dataset aber man kann wohl nur einmal Valuemember verwenden?!
    Ich würde aber gern bei Änderung in der Combobox in einem dritten Label noch den Wert aus Spalte 3 des Dataset anzeigen lassen.
    Ich habe es mit

    VB.NET-Quellcode

    1. Dim foundRows() As Data.DataRow
    2. foundRows = bde_data.Tables(0).Select(cmb_bde.Text)

    versucht aber da sucht er ja nur in ganzen Zeilen wenn ich das richtig verstehe?

    Welche Funktion muss ich zur Suche nutzer alá "Suche im Dataset nach Suchbegriff(Text der Combobox) die passende Zeile und hole dir dort den Wert aus Spalte 3"?!

    Danke wie immer für jeden Denkanstoß ?(
    ==> seid .net zueinander :D <3 <==
    Eh, gar nicht.
    AFAIU gehst Du das Ganze falsch an. Du wählst quasi eine bestimmte DataTable-Zeile mithilfe der ComboBox aus, lässt Dir aber in der ComboBox nur einen bestimmten Wert anzeigen. Soweit so richtig. Der Knackpunkt ist aber, dass das eigentliche Vorgehen nicht mit der ComboBox gemacht wird. Sondern mit der BindingSource. Durch Ändern der aktuellen Zeile mithilfe der ComboBox wird die BindingSource.Position und (viel wichtiger) BindingSource.Current geändert. Und das solltest Du nutzen, um anderen CEs einen Wert zuzuweisen. Obwohl das mit dem Zuweisen eigentlich auch schon falsch ist, da man durch korrektes DataBinding bereits alles ohne selbstgeschriebenen Code hinbekommt.
    Also: Label auswählen, im Eigenschaftenfenster DataBinding raussuchen, dort zu Text gehen und als Datenquelle die entsprechende BindingSource raussuchen und als DataMember eben jenen Wert, den Du im Label anzeigen lassen willst. Sobald sich dann (z.B. durch Auswahl eines anderen ComboBox-Wertes) BindingSource.Position bzw. BindingSource.Current automatisch ändert, ändert sich auch automatisch der Label.Text.
    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.
    Ah ok, danke für die Aufklärung. Leider wird mir meine BS nicht angezeigt auf diesem Weg da diese erst während der Laufzeut mit

    VB.NET-Quellcode

    1. bs.DataSource = bde_data.Tables(0)
    generiert wird.
    Heißt das im Umkehrschluss dass ich das Label auch erst zur Laufzeit mit dieser BS binden kann / muss?
    ==> seid .net zueinander :D <3 <==
    Habe es jetzt so gelöst:

    VB.NET-Quellcode

    1. 'Bezeichnung der Maschine in Label anzeigen
    2. For i As Integer = 0 To datagrid_bde.Rows.Count - 1
    3. If datagrid_bde.Rows(i).Cells(0).Value.ToString = cmb_bde.Text Then
    4. MessageBox.Show("Wert " & cmb_bde.Text & "gefunden in Zeile " & i.ToString)
    5. datagrid_bde.Rows(i).Selected = True
    6. lbl_maname.Text = CStr(datagrid_bde.Item(1, i).Value)
    7. Exit Sub
    8. End If
    9. Next
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    da diese erst während der Laufzeut mit
    bs.DataSource = bde_data.Tables(0)
    generiert wird.

    Irgendwas stimmt da aber nicht. Das ist keine BindingSource-Generationszeile. Wird die BindingSource wirklich erst zur Laufzeit erstellt oder nur zur Laufzeit an ihre aktuelle DataSource gekoppelt? 2 Paar Handschuhe.
    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.