Benutzer mit den meisten Antworten
foreach und DataTabel

Frage
-
Hi Forum,
habe ein DataTabel und möchte diesen in einer Schleife abarbeiten.
Habe es so gemacht.
int anz = MaListe.Rows.Count; int i = 0; for (i = 0; i < anz; i++) { labelMaName.Text = MaListe.Rows[i]["MaVorname"].ToString(); Code ... }
wie geht das mit der foreach Funktion ?
foreach (int i in MaListe.Rows)
Das geht nicht !! Da kommt die Fehlermeldung das i das falsche Format hat.
Gruß Roland
- Bearbeitet Robert Breitenhofer Montag, 26. Juli 2010 15:19 Formatierung
Antworten
-
So sollte es gehen:Daniel
foreach (System.Data.DataRow row in MaListe.Rows) { labelMaName.Text = row["MaVorname"].ToString(); }
Mit besten Grüßen, kind regards, Daniel- Als Antwort vorgeschlagen Elmar Boye Freitag, 9. Juli 2010 18:13
- Als Antwort markiert Robert Breitenhofer Montag, 26. Juli 2010 15:19
Alle Antworten
-
So sollte es gehen:Daniel
foreach (System.Data.DataRow row in MaListe.Rows) { labelMaName.Text = row["MaVorname"].ToString(); }
Mit besten Grüßen, kind regards, Daniel- Als Antwort vorgeschlagen Elmar Boye Freitag, 9. Juli 2010 18:13
- Als Antwort markiert Robert Breitenhofer Montag, 26. Juli 2010 15:19
-
Hallo Roland,
siehe zunächst Daniels Antwort für die direkte Lösung.
Allgemeiner ausgedrückt: Der Typ muß dem Datentyp entsprechen, der von dem IEnumerator
der Auflistung zurückgeliefert wird oder dahin konvertierbar sein.
Bei einer DataRowCollection ist das eine DataRow, geliefert über die GetEnumerator-Methode
die der Compiler beim foreach automatisch einsetzt.Siehe auch: Gewusst wie: Zugreifen auf Auflistungsklassen mit foreach (C#-Programmierhandbuch)
Für weitere Beispiele u. a.: C# Foreach Loop ExamplesGruß Elmar
-
Hallo Roland,
zunächst mal: wegen "labelMaName-Text" müsstest Du den Ergebniswert immer wieder in string casten, oder ToString() aufrufen. Normal versucht man möglichst wenig mit Strings, sondern mit einem int die Spalte zu identifizieren (u.a. Performanz, Fehlerfreiheit, etc.). Etwa im Szenario eines typsicheren DataSets ( 'northwindDataSet.Customers' ist dabei ein DataTable) :
private void Form1_Load(object sender, EventArgs e) { this.customersTableAdapter.Fill(this.northwindDataSet.Customers); int anz = northwindDataSet.Customers.Rows.Count;
// int i = 0; // das tut man oft auch in der for Schleife int colContactNameOrdinal = northwindDataSet.Customers.ContactNameColumn.Ordinal;
for (int i = 0; i < anz; i++) { labelMaName.Text = northwindDataSet.Customers.Rows[i][colContactNameOrdinal].ToString(); // Code ... } // wie geht das mit der foreach Funktion ? foreach (NorthwindDataSet.CustomersRow row in northwindDataSet.Customers.Rows) { labelMaName.Text = row.ContactName; } }Selbst bei nicht typisierten DataTables etc. macht man sich oft eine int-Liste, die die Spalten-Positionen definieren. Dann sähe die Implementation etwa so aus:
foreach (DataRow row in MaListe.Rows) { labelMaName.Text = row[colContactNameOrdinal].ToString(); }
ciao Frank