web-dev-qa-db-fra.com

Comment itérer à travers un DataTable

J'ai besoin de parcourir une DataTable. J'ai une colonne nommée ImagePath.

Lorsque j'utilise DataReader, je le fais comme suit:

SqlDataReader dr = null;
dr = cmd.ExecuteReader();
while (dr.Read())
{
    TextBox1.Text = dr["ImagePath"].ToString();
}

Comment puis-je obtenir la même chose avec DataTable?

127
happysmile
DataTable dt = new DataTable();

SqlDataAdapter adapter = new SqlDataAdapter(cmd);

adapter.Fill(dt);

foreach(DataRow row in dt.Rows)
{
    TextBox1.Text = row["ImagePath"].ToString();
}

... suppose que la connexion est ouverte et que la commande est correctement configurée. Je n'ai pas non plus vérifié la syntaxe, mais cela devrait vous donner une idée.

262
Justin Niessner
foreach (DataRow row in myDataTable.Rows)
{
   Console.WriteLine(row["ImagePath"]);
}

J'écris ceci de mémoire.
J'espère que cela vous donne suffisamment d'indices pour comprendre le modèle objet.

DataTable -> DataRowCollection -> DataRow (que l'on peut utiliser et rechercher le contenu des colonnes pour cette ligne, en utilisant columnName ou ordinal).

-> = contient.

29
shahkalpesh

Vous pouvez également utiliser les extensions linq pour DataSets:

var imagePaths = dt.AsEnumerble().Select(r => r.Field<string>("ImagePath");
foreach(string imgPath in imagePaths)
{
    TextBox1.Text = imgPath;
}
20
Lee

Les exemples ci-dessus sont très utiles. Mais, si nous voulons vérifier si une ligne particulière a une valeur particulière ou non. Si oui, alors supprimer et casser et en cas d'absence de valeur, erreur de projection directe. Le code ci-dessous fonctionne:

foreach (DataRow row in dtData.Rows)
        {
            if (row["Column_name"].ToString() == txtBox.Text)
            {
                // Getting the sequence number from the textbox.
                string strName1 = txtRowDeletion.Text;

                // Creating the SqlCommand object to access the stored procedure
                // used to get the data for the grid.
                string strDeleteData = "Sp_name";
                SqlCommand cmdDeleteData = new SqlCommand(strDeleteData, conn);
                cmdDeleteData.CommandType = System.Data.CommandType.StoredProcedure;

                // Running the query.
                conn.Open();
                cmdDeleteData.ExecuteNonQuery();
                conn.Close();

                GetData();

                dtData = (DataTable)Session["GetData"];
                BindGrid(dtData);

                lblMsgForDeletion.Text = "The row successfully deleted !!" + txtRowDeletion.Text;
                txtRowDeletion.Text = "";
                break;
            }
            else
            {
                lblMsgForDeletion.Text = "The row is not present ";
            }
        }
4
baymax