ID/Primary Key der ausgewaehlten Zeile einer Combobox in eine Variable speichern

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

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von andydan.

    ID/Primary Key der ausgewaehlten Zeile einer Combobox in eine Variable speichern

    Hallo Leute,

    ich moechte wissen ob mir jemand eine bessere Idee hat wie meine im Code.
    Ich moechte bei auswahl einer bestimmten Zeile auf die ID des Eintrages zugreifen und ihn in eierr Variable zur weiterverarbeitung speichern.
    Momentan habe ich mir mit enem Label beholfen aber ich wollte wissen welche Variante es noch gibt die vielleicht eleganter und fachmaenisch korrekter ist.

    Vielen Dank im voraus

    Andy


    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Imports System.Windows.Forms
    3. Public Class Form1
    4. Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Dan\Documents\Lieferungen.accdb")
    5. Dim Table As New DataTable
    6. Dim Table2 As New DataTable
    7. Public Sub Filter()
    8. Dim ID As Integer
    9. Dim i As Integer
    10. Dim l As Integer
    11. Dim searchquery As String = "Select * from HStamm"
    12. Dim command As New OleDbCommand(searchquery, conn)
    13. Dim adapter As New OleDbDataAdapter(command)
    14. adapter.Fill(Table)
    15. adapter.Fill(Table2)
    16. HStammBindingSource.DataSource = Table
    17. With HStammBindingSource
    18. DataGridView1.DataSource = .DataSource
    19. cbo1.DataSource = .DataSource
    20. cbo1.DisplayMember = "Hstamm"
    21. cbo1.ValueMember = "Nachname"
    22. lbl1.DataBindings.Add("Text", .DataSource, "ID_HStamm")
    23. lbl1.Text = l
    24. End With
    25. HStammBindingSource.DataSource = Table2
    26. With HStammBindingSource
    27. cbo2.DataSource = .DataSource
    28. cbo2.DisplayMember = "Hstamm"
    29. cbo2.ValueMember = "ID_Hstamm"
    30. End With
    31. i = Table.Rows.Count - 1
    32. ID = CInt(Table.Rows(i).Item("ID_HStamm"))
    33. lblID.Text = ID
    34. End Sub


    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Dassis verwunderlich.
    Wenn du einen Wert in ein Label tun kannst, wieso dann nicht in eine Variable?

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Imports System.Windows.Forms
    3. Public Class Form1
    4. Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Dan\Documents\Lieferungen.accdb")
    5. Dim Table As New DataTable
    6. Dim Table2 As New DataTable
    7. Dim Id1 as Integer
    8. Dim Id2 as Integer
    9. Public Sub Filter()
    10. Dim ID As Integer
    11. Dim i As Integer
    12. Dim l As Integer
    13. Dim searchquery As String = "Select * from HStamm"
    14. Dim command As New OleDbCommand(searchquery, conn)
    15. Dim adapter As New OleDbDataAdapter(command)
    16. adapter.Fill(Table)
    17. adapter.Fill(Table2)
    18. HStammBindingSource.DataSource = Table
    19. With HStammBindingSource
    20. DataGridView1.DataSource = .DataSource
    21. cbo1.DataSource = .DataSource
    22. cbo1.DisplayMember = "Hstamm"
    23. cbo1.ValueMember = "Nachname"
    24. lbl1.DataBindings.Add("Text", .DataSource, "ID_HStamm")
    25. Id1 = l
    26. End With
    27. HStammBindingSource.DataSource = Table2
    28. With HStammBindingSource
    29. cbo2.DataSource = .DataSource
    30. cbo2.DisplayMember = "Hstamm"
    31. cbo2.ValueMember = "ID_Hstamm"
    32. End With
    33. i = Table.Rows.Count - 1
    34. ID = CInt(Table.Rows(i).Item("ID_HStamm"))
    35. Id2 = ID
    36. End Sub
    Hallo ErfinderDesRades,
    vielen Dank fuer deine schnelle Antwort.
    Ich muss mich Entschuldigen. Habe gerade gesehen das ich irgendwie einen fehler im code hatte.
    Hier der richtige Code der bei mir zwar Funktioniert, sich aber auf die Ursprungsfrage bezieht.
    Ich rede dabei um die Zeile 27-28.
    Gibt es hier eine bessere Loesung an die ID?HStamm dranzukommen und in eine Variable zu speichern?
    Ich will die ID danach in einem Insert einer neuen Talbelle weiterverarbeiten.
    als zweite Frage haette ich noch. Spricht was dagegen nur eine BindingSource zu verwenden um mehrere cbo Boxen zu fuellen wie ich es gemacht habe oder findest du das ok?

    Danke Andy

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Imports System.Windows.Forms
    3. Public Class Form1
    4. Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Dan\Documents\Lieferungen.accdb")
    5. Dim Table As New DataTable
    6. Dim Table2 As New DataTable
    7. Public Sub Filter()
    8. Dim ID As Integer
    9. Dim i As Integer
    10. Dim l As Long
    11. Dim searchquery As String = "Select * from HStamm"
    12. Dim command As New OleDbCommand(searchquery, conn)
    13. Dim adapter As New OleDbDataAdapter(command)
    14. adapter.Fill(Table)
    15. adapter.Fill(Table2)
    16. 'befuellen der cbo1 und merken der ID in variable l aus cbo1.text
    17. HStammBindingSource.DataSource = Table
    18. With HStammBindingSource
    19. DataGridView1.DataSource = .DataSource
    20. cbo1.DataSource = .DataSource
    21. cbo1.DisplayMember = "Hstamm"
    22. cbo1.ValueMember = "Nachname"
    23. lbl1.DataBindings.Add("Text", .DataSource, "ID_HStamm")
    24. l = lbl1.Text
    25. End With
    26. HStammBindingSource.DataSource = Table2
    27. With HStammBindingSource
    28. cbo2.DataSource = .DataSource
    29. cbo2.DisplayMember = "Hstamm"
    30. cbo2.ValueMember = "ID_Hstamm"
    31. End With
    32. i = Table.Rows.Count - 1
    33. ID = CInt(Table.Rows(i).Item("ID_HStamm"))
    34. lblID.Text = ID
    35. End Sub
    Du kannst mal probieren

    VB.NET-Quellcode

    1. l = Table(0)("ID_HStamm")
    Müsste dasselbe bei rauskommen wie bei deiner Zeile#27.
    Wenn du cbo1 und lbl1 ansonsten nicht weiter brauchst, können die Zeilen #20 - 28 dann gelöscht werden.

    Aber mir sieht das alles ziemlich planlos aus.
    Imo muss man eine Anwendung mit Datenbank-Anbindung komplett anders aufziehen, aber dafür fehlen dir vermutlich sämtliche Grundlagen.
    Daher werden meine Vorschläge, selbst wenn sie punktuell funktionieren, dem Gesamt-Schlamassel nicht abhelfen.

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

    Ja, und

    VB.NET-Quellcode

    1. l = Table(0)("ID_HStamm")
    ?
    Haste es denn mal ausprobiert?



    Achso - zum Auseinandersetzen: Möglicherweise brauchst du gar keine Datenbank. Das würde vieles ungeheuer erleichtern.
    Erklär mal, was du programmieren willst, und warum du dafür eine Datenbank brauchst (oder zu brauchen meinst).

    ich habe es ausprobiert aber ich bekomme den Wert Nothing.
    Ich habe eine Datenbank in der Tabelle Kunden, Geraete .... drin ist
    Ich moechte jetzt das man die daten eingeben kann bearbeiten abrufen usw.
    Habe auch Comboboxen drin die sich die Daten von der db abrufen sollen und dem benutzer dann die moeglichkeit einer auswahl geben.
    In der Form in der ich neue Daten anlege wollte ich die ID haben un das in die Tabelle Auftraege speichern zu koennen.

    andydan schrieb:

    ich habe es ausprobiert aber ich bekomme den Wert Nothing.
    kann nicht sein. l ist vom Datentyp Long, und kann niemals Nothing werden. Zahlen werden 0, aber nicht Nothing.
    Egal.

    In deiner Datenbank sind also Kunde, Geraet, und ... drin.
    Auch egal - zunächst musst du - s.o. - überhaupt lernen, Datentypen zu unterscheiden.
    Als allererstes ist da Visual Studio - Empfohlene Einstellungen zu absolvieren.
    Das macht den Compiler streng, sodass er Datentypen strict unterscheidet.
    Als Folge davon werden unerkannte Fehler sichtbar, und indem du diese auf korrekte Weise behebst, fängst du auch an, Datentypen zu unterscheiden - und das ist eine fundamentale Vorbedingung fürs Proggen.
    Ich fahre hier auch garnet fort, sondern melde dich, wenn du damit durch bist, und erzähl, wie's dir damit ergangen ist.
    super. Danke fuer die Tipps.

    Ich melde mich

    Andy
    p.s. du hast natuerlich Recht. Ich bekomme den Wert 1. richtig
    Was er aber nicht macht ist das wenn ich etwas anderes auswaehle in der cboBox, das er den Wert der ID wechselt.

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

    @ErfinderDesRades
    vielen Dank noch mal fuer deine Tips. Ich habe mir das von dir gesagte yu Heryen genommen und mich erst mal "ein wenig" durchgelesen.
    Mit ein wenig meine ich das ich aus dem lesen bald nicht mehr rauskam.
    Ich habe durch die Tutorials die auch oft von dir stammten eine ganz andere sicht auf das ganze bekommen.
    Heute habe ich auch ein Marathon an den Videos die du vor langer Zeit mal auf Youtube veroeffentlicht hast(vier Views ...) hinter mir und ich muss sagen ich habe sehr viel dabei lernen koennen. Vielen Dank noch mal auch dafuer.
    Es habe sich dabei natuerlich andere Fragen aufgetan allerdings moechte ich erst mal mein neu erworbenes Wissen einsetzen und danach mich um den rest kuemmern.

    Ich wuensche dir noch einen schoene Abend.
    Bis zum naechsten mal.