Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Combobox mit Werten aus TableAdapter füllen
AdmiralKuzan
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

Combobox mit Werten aus TableAdapter füllen

beantworten | zitieren | melden

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
Attachments
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.431

beantworten | zitieren | melden

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();
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.985

beantworten | zitieren | melden

Daten haben in den UI Elementen nichts zu suchen.

Auch WindowsForms bietet DataBinding, das sollte auch hier benutzt werden.
private Nachricht | Beiträge des Benutzers