Laden...

Combobox mit Werten aus TableAdapter füllen

Erstellt von AdmiralKuzan vor einem Jahr Letzter Beitrag vor einem Jahr 772 Views
A
AdmiralKuzan Themenstarter:in
14 Beiträge seit 2022
vor einem Jahr
Combobox mit Werten aus TableAdapter füllen

Zuallererst: Ich programmiere eine WindowsForms Anwendung im .net Framwork welche Daten auf einem SQL Server (unter Ubuntu Server) anzeigen und graphisch darstellen soll

Nun zu meinem Problem: Ich habe einen TableAdapter mit dem Namen COLUMNSTableAdapter erstellt, welcher mir alle Spaltennamen (bis auf eine) einer Tabelle ausgibt.


SELECT        COLUMN_NAME
FROM            INFORMATION_SCHEMA.COLUMNS
WHERE        (TABLE_NAME = N'MQTT_Daten') AND (CHARACTER_SET_NAME <> 'Zeit')

Nun möchte ich für Visualisierungszwecke diese Ausgabe in eine Combobox überführen, mit der man dann auswählen kann welche der Spalten in einem Diagramm angezeigt werden sollen. Dafür habe ich den TableAdapter als Combobox per Drag and Drop in meine Form gezogen, sodass die entsprechenden Bindings erstellt werden und ich habe eine Methode "PupulateCombobox()" geschrieben. Sie sieht wie folgt aus:


private void PopulateCombobox()
        {
            DataTable Spalten = new DataTable();
            BachelorDataSetTableAdapters.COLUMNSTableAdapter adapter = new BachelorDataSetTableAdapters.COLUMNSTableAdapter();
            Spalten= adapter.GetData();
            for (int i= 0; i < Spalten.Rows.Count; i++)
            {
                comboBox1.Items.Add(Spalten.Rows[i]);
            }
        }

Diese Funktion rufe ich innerhalb der Form1_Load Funktion auf.

Das ganze macht leider nicht das was es soll, sondern erzeugt das, was ihr im Anhang sehen könnt. Der erste Spaltenname "Temperatur" wird angezeigt, sowie 3 weitere Einträge (von der Anzahl her richtig). Allerdings stehen nun nicht die Spaltennamen da, sondern vier mal "Datenbanktool.BachelorDataSet+COLUMNSRow". Beim Debuggen steht allerdings im DataTable Spalten genau das drin was es soll (meine vier Spaltennamen).

Weiß jemand wo der Fehler liegt?

Vielen Dank und Liebe Grüße

4.931 Beiträge seit 2008
vor einem Jahr

Mit

Spalten.Rows[i]

greifst du auf die ganze Zeile zu, nicht auf ein einzelnes Element (der DataTable) - verwende

Spalten.Rows[i][0]

Edit:
Oder noch schöner, s.a. Beispiel in DataRowCollection:


foreach (DataRow row in table.Rows)
{
  comboBox.Items.Add(row[0]);
}

Und weil ich es gerade noch in deinem Code sehe (typischer Anfängerfehler):


DataTable Spalten = new DataTable();
// ...
Spalten = adapter.GetData();

Die Zuweisung "= new DataTable()" ist überflüssig, da der Variablen ja gleich darauf wieder ein anderer Wert zugewiesen wird.

Und der Name Spalten ist auch mißverständlich (und sollte dataTable o.ä. heißen - und auch als lokale Variable mit einem Kleinbuchstaben anfangen). Vllt. hast du deswegen auch den Fehler nicht gesehen?

Am besten also


DataTable dataTable = adapter.GetData();

F
10.010 Beiträge seit 2004
vor einem Jahr

Daten haben in den UI Elementen nichts zu suchen.

Auch WindowsForms bietet DataBinding, das sollte auch hier benutzt werden.