Hallo,
bin mir jetzt nicht sicher ob das ein DB- oder ein Programmier-Issue ist. Daher öffne ich das Thema mal hier. Falls ich doch falsch liege, bitte verschieben. Danke.
Ich habe Maske mit drei Datensätzen, die drei Comboboxen beinhalten, die ich mittels einer DataTable befülle.
Die Funktion get_color soll aus dem Integer-Wert aus einer Tabelle mit Farben den entsprechenden Farbnamen ausgeben.
Mein Ziel war, anhand die Comboboxen mit der entsprechenden Hintergrundfarbe und dem Farbnamen zu befüllen. Die Msgboxen habe ich eingebaut um dem Fehler auf die Schliche zu kommen.
Folgendes Phänomen. Ich lese aus der Datenbanktabelle "risikokategorien" die Werte 1 = green, 2 = yellow und 4 = red, die Nummern sind auch gleichzeitig die ID (auto_inc) in der Datenbanktabelle "availablecolors".
Die Comboboxen sind mittels Datasource an die Tabelle "availablecolors" gebunden, Valuemember "id" und Displaymember "color_name".
Ich lassen anhand der aus der Tabelle "risikokategorie" ausgelesenen Farbe die Hintergrundfarbe der Combobox angleichen und mit der get_color-Funktion will ich den Farbname in die Combobox als aktuelle Selektion schreiben.
Die Hintergrundfarbe funktioniert. Nur der Farbname, hier wird der letzte gelesene Farbname aus der Datatable genommen (in der aktuellen Reihenfolge 4 = red).

Anhand der Messageboxen sehe ich, dass die richtigen Werte aus der DataTable gelesen werden. Trotzdem werden die Comboboxen vom Text gleich geschaltet.
Und jetzt wird es noch schräger, wenn ich über eine beliebige Combobox die Farbauswahl ändere, bekommen alle anderen auch die gleiche Farbauswahl.
Habe ich unwissentlich irgendeine Verknüpfung der Comboboxen eingerichtet? Oder liegt das vielleicht doch an der DataTable?
Was mache ich hier falsch?
Bye
Markus
bin mir jetzt nicht sicher ob das ein DB- oder ein Programmier-Issue ist. Daher öffne ich das Thema mal hier. Falls ich doch falsch liege, bitte verschieben. Danke.
Ich habe Maske mit drei Datensätzen, die drei Comboboxen beinhalten, die ich mittels einer DataTable befülle.
VB.NET-Quellcode
- If OpenDB() Then
- sqlCmd.Connection = Conn
- sqlCmd.CommandText = "SELECT * From fisms_risikoklassen_3 Order by id"
- DtA.SelectCommand = sqlCmd
- DtA.Fill(sqlDt)
- For Each row In sqlDt.AsEnumerable()
- color_name = ""
- rk_id = CInt(row("id"))
- rk_name = CStr(row("rk_name"))
- rk_color = CInt(row("rk_color"))
- rk_text = CStr(row("rk_text"))
- If rk_id = 1 Then
- TB_rk3_1.Text = rk_name
- color_name = get_color(CInt(rk_color))
- CB_rk3_color1.BackColor = Color.FromName(color_name)
- CB_rk3_color1.SelectedValue = rk_color
- MsgBox("ID: " + CStr(rk_id) + " RK_Color: " + CStr(rk_color) + " SelVal: " + CStr(CB_rk3_color1.SelectedValue))
- CB_rk3_color1.Text = color_name
- TB_rk3_text1.Text = rk_text
- End If
- If rk_id = 2 Then
- TB_rk3_2.Text = rk_name
- color_name = get_color(CInt(rk_color))
- CB_rk3_color2.BackColor = Color.FromName(color_name)
- CB_rk3_color2.SelectedValue = rk_color
- MsgBox("ID: " + CStr(rk_id) + " RK_Color: " + CStr(rk_color) + " SelVal: " + CStr(CB_rk3_color2.SelectedValue))
- CB_rk3_color2.Text = color_name
- TB_rk3_text2.Text = rk_text
- End If
- If rk_id = 3 Then
- TB_rk3_3.Text = rk_name
- color_name = get_color(CInt(rk_color))
- CB_rk3_color3.BackColor = Color.FromName(color_name)
- CB_rk3_color3.SelectedValue = rk_color
- MsgBox("ID: " + CStr(rk_id) + " RK_Color: " + CStr(rk_color) + " SelVal: " + CStr(CB_rk3_color3.SelectedValue))
- CB_rk3_color3.Text = color_name
- TB_rk3_text3.Text = rk_text
- End If
- Next
- sqlDt.Clear()
- Conn.Close()
- Conn.Dispose()
- End If
Die Funktion get_color soll aus dem Integer-Wert aus einer Tabelle mit Farben den entsprechenden Farbnamen ausgeben.
VB.NET-Quellcode
- Public Function get_color(color_id As Integer) As String
- Dim result As String = ""
- Dim col_id As Integer = 0
- Dim col_name As String = ""
- Dim a_row As DataRow
- If OpenDB() Then
- If IsDBNull(color_id) Then
- color_id = 10
- End If
- sqlCmd.Connection = Conn
- sqlCmd.CommandText = "SELECT * From fisms_availablecolors ORDER BY id"
- DtA.SelectCommand = sqlCmd
- DtA.Fill(xsqlDt)
- a_row = xsqlDt.Select("[id] = '" & CStr(color_id) & "'").FirstOrDefault()
- If Not a_row Is Nothing Then
- col_name = CStr(a_row.Item("color_name"))
- Else
- col_name = "white"
- End If
- result = col_name
- xsqlDt.Clear()
- Conn.Close()
- Conn.Dispose()
- Else
- MsgBox("Kann Datenbank nicht öffnen")
- End If
- Return result
- End Function
Mein Ziel war, anhand die Comboboxen mit der entsprechenden Hintergrundfarbe und dem Farbnamen zu befüllen. Die Msgboxen habe ich eingebaut um dem Fehler auf die Schliche zu kommen.
Folgendes Phänomen. Ich lese aus der Datenbanktabelle "risikokategorien" die Werte 1 = green, 2 = yellow und 4 = red, die Nummern sind auch gleichzeitig die ID (auto_inc) in der Datenbanktabelle "availablecolors".
Die Comboboxen sind mittels Datasource an die Tabelle "availablecolors" gebunden, Valuemember "id" und Displaymember "color_name".
Ich lassen anhand der aus der Tabelle "risikokategorie" ausgelesenen Farbe die Hintergrundfarbe der Combobox angleichen und mit der get_color-Funktion will ich den Farbname in die Combobox als aktuelle Selektion schreiben.
Die Hintergrundfarbe funktioniert. Nur der Farbname, hier wird der letzte gelesene Farbname aus der Datatable genommen (in der aktuellen Reihenfolge 4 = red).
Anhand der Messageboxen sehe ich, dass die richtigen Werte aus der DataTable gelesen werden. Trotzdem werden die Comboboxen vom Text gleich geschaltet.
Und jetzt wird es noch schräger, wenn ich über eine beliebige Combobox die Farbauswahl ändere, bekommen alle anderen auch die gleiche Farbauswahl.
Habe ich unwissentlich irgendeine Verknüpfung der Comboboxen eingerichtet? Oder liegt das vielleicht doch an der DataTable?
Was mache ich hier falsch?
Bye
Markus
8-Bit Nerd - Retro-Computer Junkie - Elektronik-Fuzzi - Lötkolben-Jongleur
Lord Luxors Retrogalerie llrg.me
Lord Luxors Retrogalerie llrg.me