Como iterar através de uma DataTable

Eu preciso fazer uma iteração através de uma DataTable . Eu tenho uma coluna lá chamada ImagePath .

Quando estou usando o DataReader eu faço assim:

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

Como posso conseguir o mesmo usando DataTable ?

 DataTable dt = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dt); foreach(DataRow row in dt.Rows) { TextBox1.Text = row["ImagePath"].ToString(); } 

… assume que a conexão está aberta e o comando está configurado corretamente. Eu também não chequei a syntax, mas deveria lhe dar a ideia.

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

Estou escrevendo isso da memory.
Espero que isso lhe dê uma dica suficiente para entender o modelo de object.

DataTable -> DataRowCollection -> DataRow (qual deles pode usar e procurar o conteúdo da coluna para aquela linha, usando columnName ou ordinal).

-> = contém.

Você também pode usar extensões linq para DataSets:

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

Os exemplos acima são bastante úteis. Mas, se quisermos verificar se uma determinada linha está tendo um valor específico ou não. Se sim, então exclua e quebre e, em caso de nenhum valor, encontrar o erro de lance direto. Abaixo do código funciona:

 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 "; } }