Hallo zusammen,
ich versuche gerade, in VB eine SQLite-Datenbank einzubinden (das geht) und Werte an eine CheckedListBox auszugeben.
In C# hat das geklappt mit folgendem Code:
Ich lese also die SQL-Datenbank aus und schreibe die Werte in ein Dataset, was dann wiederum in die CheckedListBox schreibt.
Jetzt nutze ich eine andere Datenbank, siehe hier:
Ich würde gerne wissen, wie ich es so gestalte, dass ich einer CheckedListBox die ID mitgebe, um zu sehen, welches Element gecheckt wurde, der Name soll der Text der CheckedListBox sein.
Nun dachte ich mir, dass es keinen Sinn macht, für eine Abfrage ein ganzes DataSet zu nehmen sondern wollte nur eine Datatable nehmen.
Ich erhalte allerdings eine IndexOutOfRange-Exception: "An der Position 0 befindet sich keine Zeile.". Warum ist das der Fall?
Lustigerweise funktioniert das gleiche Prinzip aber an einer anderen Stelle einwandfrei (allerdings mit einer DropDownList):
Und wie gebe ich am besten die ID weiter? Oder sollte ich es ganz anders angehen? Tut mir Leid, ich bin kein VB-Profi.
Wenn jemand also einen Tip hat, wäre ich sehr dankbar.
Gruß
Broco
Edit: Ich bin ein Idiot. Bei der For-Schleife zählt bis zur Anzahl der Reihen, aber der Index beginnt ja bei 0. So gehts:
Jedoch die andere Frage: Wie übergebe ich die ID aus der Datenbank an die CheckedListBox Items?
Also so ähnlich wie in HTML, wo ein Element einen Namen, eine ID und einen Wert hat. Ich muss ja die Items einzeln ansprechen können, auch wenn sie dynamisch sind.
ich versuche gerade, in VB eine SQLite-Datenbank einzubinden (das geht) und Werte an eine CheckedListBox auszugeben.
In C# hat das geklappt mit folgendem Code:
Quellcode
- private void Reload_List()
- {
- SQLiteConnection connection = new SQLiteConnection();
- connection.ConnectionString = "Data Source=" + database;
- connection.Open();
- var ausgabeset = new DataSet();
- SQLiteDataAdapter adapter = new SQLiteDataAdapter("SELECT id, name FROM " + tablename + " ORDER BY name ASC", connection);
- adapter.Fill(ausgabeset, tablename);
- this.checkedListBox1.Items.Clear();
- for (int i = 0; i < ausgabeset.Tables[tablename].Rows.Count; i++)
- {
- this.checkedListBox1.Items.Add(ausgabeset.Tables[tablename].Rows[i][1], false);
- }
- adapter.Dispose();
- connection.Close();
- connection.Dispose();
- }
Ich lese also die SQL-Datenbank aus und schreibe die Werte in ein Dataset, was dann wiederum in die CheckedListBox schreibt.
Jetzt nutze ich eine andere Datenbank, siehe hier:
Ich würde gerne wissen, wie ich es so gestalte, dass ich einer CheckedListBox die ID mitgebe, um zu sehen, welches Element gecheckt wurde, der Name soll der Text der CheckedListBox sein.
Nun dachte ich mir, dass es keinen Sinn macht, für eine Abfrage ein ganzes DataSet zu nehmen sondern wollte nur eine Datatable nehmen.
Quellcode
- Using connection As New SQLiteConnection
- connection.ConnectionString = "Data Source=" + Modul_Global.database
- connection.Open()
- Using machinetable = New DataTable()
- Using adapter = New SQLiteDataAdapter("SELECT 'analysen.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 = 1 AND betriebe.Betrieb = '" + Modul_Global.firma + "' ORDER BY analysen.Name ASC", connection)
- adapter.Fill(machinetable)
- lb_machines.Items.Clear()
- Dim i As Integer
- For i = 0 To machinetable.Rows.Count
- Me.lb_machines.Items.Add(machinetable.Rows(i)("Name"), False)
- Next
- End Using
- End Using
- End Using
Ich erhalte allerdings eine IndexOutOfRange-Exception: "An der Position 0 befindet sich keine Zeile.". Warum ist das der Fall?
Lustigerweise funktioniert das gleiche Prinzip aber an einer anderen Stelle einwandfrei (allerdings mit einer DropDownList):
Quellcode
- Private Sub Betriebsauswahl_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Modul_Global.firma = "NULL"
- Using connection As New SQLiteConnection
- connection.ConnectionString = "Data Source=" + Modul_Global.database
- connection.Open()
- Using ausgabetable = New DataTable()
- Using adapter = New SQLiteDataAdapter("SELECT Betrieb FROM betriebe ORDER BY Betrieb ASC", connection)
- adapter.Fill(ausgabetable)
- Betriebselector.Items.Clear()
- Dim i As Integer
- For i = 0 To ausgabetable.Rows.Count
- Betriebselector.Items.Add(ausgabetable.Rows(i)("Betrieb"))
- Next
- End Using
- End Using
- End Using
- End Sub
Und wie gebe ich am besten die ID weiter? Oder sollte ich es ganz anders angehen? Tut mir Leid, ich bin kein VB-Profi.
Wenn jemand also einen Tip hat, wäre ich sehr dankbar.
Gruß
Broco
Edit: Ich bin ein Idiot. Bei der For-Schleife zählt bis zur Anzahl der Reihen, aber der Index beginnt ja bei 0. So gehts:
Jedoch die andere Frage: Wie übergebe ich die ID aus der Datenbank an die CheckedListBox Items?
Also so ähnlich wie in HTML, wo ein Element einen Namen, eine ID und einen Wert hat. Ich muss ja die Items einzeln ansprechen können, auch wenn sie dynamisch sind.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Broco“ ()