Ich könnte mich so ärgern, VB bringt mich manchmal zur Verzweiflung (bin darin noch Anfänger).
Folgende Problemstellung:
Ich mache eine WinForms-Anwendung, die Daten aus einer SQLite Datenbank auslesen soll. Darin ist unter anderem eine Tabelle, die die Werte ID und Name enthält. Jetzt will ich die Spalte Name ausgeben zusammen mit einer Checkbox, man soll also nachher die Items aus der Datenbank ankreuzen können und die IDs der angekreuzten Elemente sollen für andere Funktionen weitergegeben werden. Das Einlesen der Tabellen aus SQLite in eine Datatable funktioniert einwandfrei, die Darstellung kriege ich auch hin.
Habe also erst einmal die Checkedlistbox genommen und es funktioniert auch einwandfrei, allerdings kann die CheckedListBox keine automatischen Zeilenumbrüche, sodass man bei einer fixen Breite entweder einen horizontalen Scrollbalken hat oder der Text abgeschnitten wird.
Jetzt habe ich DataGridView genommen und der Text wird korrekt umgebrochen, allerdings weiß ich nicht, wie die Daten richtig binde (also nur die Ausgabe der Spalten funktioniert zwar, aber statt der IDs sollen da Checkboxen sein, die die IDs als "Name" haben).
Nur mal für den Anfänger, der eigentlich nur Webanwendungen macht:
Dort kann jedes Formelement ja eine ID, eine Klasse, einen Namen und einen Wert haben.
Wie mache ich das hier?
Also was ich möchte:
1) ein DatagridView mit zwei Spalten, eine mit Text, eine mit Checkbox. Die Checkbox kann den Wert (z.B. in PHP wäre das die Option value) True oder False haben und der Name der Checkbox soll die ID aus der Datenbank sein (oder bessergesagt zusammengesetzt: ckbox[ID]). Der Name daneben entsprechend der Name, der zur ID gehört. Ich bekomme es schon hin, eine DataGridViewCheckBoxColumn usw. einzufügen, aber die ist ja nicht mit den IDs der Datenbank verknüpft.
2) Ich möchte die Checkboxen anhand der IDs aus der Datenbank ansprechen können und nicht anhand ihrer Reihe in der Datatable. Zum Beispiel, um die Checkbox zu switchen, wenn jemand auf den Namen daneben klickt und für einen Button "alles auswählen / abwählen".
Ist das möglich? Und wenn ja, wie genau?
Ich habe mich jetzt wirklich stundenlang durch sämtliche Foren gelesen, aber ich steh völlig auf dem Schlauch. Vielleicht gehe ich auch falsch heran.
Bei den CheckedListBoxes habe ich das so gelöst mit dem Index:
Das kam mir aber irgendwie "falsch" vor (obwohl es funktionierte)
Folgende Problemstellung:
Ich mache eine WinForms-Anwendung, die Daten aus einer SQLite Datenbank auslesen soll. Darin ist unter anderem eine Tabelle, die die Werte ID und Name enthält. Jetzt will ich die Spalte Name ausgeben zusammen mit einer Checkbox, man soll also nachher die Items aus der Datenbank ankreuzen können und die IDs der angekreuzten Elemente sollen für andere Funktionen weitergegeben werden. Das Einlesen der Tabellen aus SQLite in eine Datatable funktioniert einwandfrei, die Darstellung kriege ich auch hin.
Habe also erst einmal die Checkedlistbox genommen und es funktioniert auch einwandfrei, allerdings kann die CheckedListBox keine automatischen Zeilenumbrüche, sodass man bei einer fixen Breite entweder einen horizontalen Scrollbalken hat oder der Text abgeschnitten wird.
Jetzt habe ich DataGridView genommen und der Text wird korrekt umgebrochen, allerdings weiß ich nicht, wie die Daten richtig binde (also nur die Ausgabe der Spalten funktioniert zwar, aber statt der IDs sollen da Checkboxen sein, die die IDs als "Name" haben).
Nur mal für den Anfänger, der eigentlich nur Webanwendungen macht:
Dort kann jedes Formelement ja eine ID, eine Klasse, einen Namen und einen Wert haben.
Wie mache ich das hier?
Also was ich möchte:
1) ein DatagridView mit zwei Spalten, eine mit Text, eine mit Checkbox. Die Checkbox kann den Wert (z.B. in PHP wäre das die Option value) True oder False haben und der Name der Checkbox soll die ID aus der Datenbank sein (oder bessergesagt zusammengesetzt: ckbox[ID]). Der Name daneben entsprechend der Name, der zur ID gehört. Ich bekomme es schon hin, eine DataGridViewCheckBoxColumn usw. einzufügen, aber die ist ja nicht mit den IDs der Datenbank verknüpft.
2) Ich möchte die Checkboxen anhand der IDs aus der Datenbank ansprechen können und nicht anhand ihrer Reihe in der Datatable. Zum Beispiel, um die Checkbox zu switchen, wenn jemand auf den Namen daneben klickt und für einen Button "alles auswählen / abwählen".
Ist das möglich? Und wenn ja, wie genau?
Ich habe mich jetzt wirklich stundenlang durch sämtliche Foren gelesen, aber ich steh völlig auf dem Schlauch. Vielleicht gehe ich auch falsch heran.
Bei den CheckedListBoxes habe ich das so gelöst mit dem Index:
Quellcode
- Public Class MyListBoxItem
- Private _name As String
- Private _index As String
- Public Property Name As String
- Get
- Return _name
- End Get
- Set(ByVal value As String)
- _name = value
- End Set
- End Property
- Public Property Index As String
- Get
- Return _index
- End Get
- Set(ByVal value As String)
- _index = value
- End Set
- End Property
- Public Overrides Function ToString() As String
- Return Name
- End Function
- End Class
- Using connection As New SQLiteConnection
- connection.ConnectionString = "Data Source=" + Modul_Global.database
- connection.Open()
- Using elsetable = New DataTable()
- elsetable.TableName = "else"
- Using adapter = New SQLiteDataAdapter("SELECT analysen.ID AS ID, analysen.Name AS Name FROM analysen INNER JOIN zuweisung_betriebe_analysen ON analysen.ID = zuweisung_betriebe_analysen.ID_Analyse INNER JOIN betriebe ON betriebe.ID = zuweisung_betriebe_analysen.ID_Betrieb WHERE analysen.Kategorie = 4 AND betriebe.Betrieb = '" + Modul_Global.firma + "' ORDER BY analysen.Name ASC", connection)
- adapter.Fill(elsetable)
- lb_else.Items.Clear()
- Dim i As Integer
- For i = 0 To (elsetable.Rows.Count - 1)
- Me.lb_else.Items.Add(New MyListBoxItem() With {.Name = elsetable.Rows(i)("Name"), .Index = elsetable.Rows(i)("ID")}, False)
- Next
- End Using
- End Using
- End Using
Das kam mir aber irgendwie "falsch" vor (obwohl es funktionierte)
