Autor Beitrag
Alex1989
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 02.08.10 17:27 
Hallo zusammen,

Ich habe in einem kleine Projekt das Problem das ich keine möglichkeit finde die texte der Spalten header auszulesen und in einem Array zu speichern. eine allgemeine lösung für das problem würde mir schon reichen.

Das ganze beruht auf einer Access Tabelle
diese wird dann in ein Dataset geladen ...

Danke schonmal im vorraus


Moderiert von user profile iconKha: Topic aus WinForms verschoben am Mo 02.08.2010 um 19:19
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 02.08.10 19:05 
Hallo und :welcome:

Ein DataSet enthält DataTables. Eine DataTable enthält Columns, diese sind vom Typ DataColumnCollection. Die einzelnen Items sind vom Typ DataColumn; diese haben u.a. ColumnName und Caption.

Ich kenne keine Methode, die alle Namen in einem Schritt liefert. Es ist aber kein Problem, diese Informationen mit einer Schleife auszulesen. Du musst nur daran denken, dass ein Array eine feste Größe hat; diese müsstest du also (nach der Anzahl der Spalten) als erstes bestimmen.

Gruß Jürgen

Für diesen Beitrag haben gedankt: Alex1989
Alex1989 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 03.08.10 10:40 
Danke Jürgen

Das war genau die Infomation die ich gebraucht habe! konnte also das Problem nun lösen funktioniert wunderbar.
Habe einfach das Datatable zu einer DataColumnCollection hinzugefügt und konnte die dazugehörige Variable dann als ein Array verwenden und alle nötigen infomationen auslesen

Ich pack mal den groben Code rein damit das nachgelesen werden kann.

DataTable dt = new DataTable();
.
.
.
OleDbDataAdapter adapter =
new OleDbDataAdapter("Select * from " + tabellenname, conn);
adapter.Fill(dt);
conn.Close();

string[] namenliste = new string[dt.Columns.Count];
DataColumnCollection dcc = dt.Columns;

for (int i = 0; i < dt.Columns.Count; i++)
{
namenliste[i] = dcc[i].ColumnName.ToString();
}

Und danke Nochmals =)
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 03.08.10 16:47 
Freut mich, dass es so geholfen hat. Bitte beachte künftig, dass Code als solcher markiert werden soll: Code-Bereich markieren, unter Bereiche C# wählen, dann den Plus-Button.

Kleine Anmerkungen: Die Variable dcc ist überflüssig; auch im for kannst du dt.Columns benutzen. Statt for geht auch foreach; das ist in aller Regel praktischer und liefert meistens dieselbe Reihenfolge. (Weil du mit dem Eintragen in das Array sowieso einen Index brauchst, ist in diesem Fall for vermutlich praktischer.) ColumnName.ToString() ist überflüssig, weil ColumnName bereits ein String ist. Der Schluss kann also so verkürzt werden:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
string[] namenliste = new string[dt.Columns.Count];
for (int i = 0; i < dt.Columns.Count; i++)
{
    namenliste[i] = dt.Columns[i].ColumnName;
}

Übrigens ist überall dort, wo eine Liste keine feste Größe hat, List<T> besser als ein Array. Vor allem das Hinzufügen (und Entfernen) ist dabei erheblich einfacher. Das hatte ich bisher nicht vorgeschlagen, weil du ausdrücklich ein Array haben wolltest.

Gruß Jürgen