none
foreach und DataTabel RRS feed

  • 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

    Freitag, 9. Juli 2010 16:10

Antworten

  • So sollte es gehen:
    foreach (System.Data.DataRow row in MaListe.Rows)
    {
       labelMaName.Text = row["MaVorname"].ToString();
    }
        
    
    Daniel
    Mit besten Grüßen, kind regards, Daniel
    Freitag, 9. Juli 2010 16:29

Alle Antworten

  • So sollte es gehen:
    foreach (System.Data.DataRow row in MaListe.Rows)
    {
       labelMaName.Text = row["MaVorname"].ToString();
    }
        
    
    Daniel
    Mit besten Grüßen, kind regards, Daniel
    Freitag, 9. Juli 2010 16:29
  • 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 Examples

    Gruß Elmar

    Freitag, 9. Juli 2010 18:25
  • 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
    Freitag, 9. Juli 2010 19:42