Как выполнять итерацию с помощью DataTable
Мне нужно выполнить итерацию через DataTable
. У меня есть столбец с именем ImagePath
.
Когда я использую DataReader
, я делаю это следующим образом:
SqlDataReader dr = null;
dr = cmd.ExecuteReader();
while (dr.Read())
{
TextBox1.Text = dr["ImagePath"].ToString();
}
Как я могу достичь того же, используя DataTable
?
Ответы
Ответ 1
DataTable dt = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
foreach(DataRow row in dt.Rows)
{
TextBox1.Text = row["ImagePath"].ToString();
}
... предполагает, что соединение открыто, и команда настроена правильно. Я также не проверял синтаксис, но он должен дать вам эту идею.
Ответ 2
foreach (DataRow row in myDataTable.Rows)
{
Console.WriteLine(row["ImagePath"]);
}
Я пишу это из памяти.
Надеюсь, это даст вам достаточно намека на понимание объектной модели.
DataTable
→ DataRowCollection
→ DataRow
(который можно использовать и искать содержимое столбца для этой строки, используя имя столбца или порядковый номер).
- >= содержит.
Ответ 3
Вы также можете использовать расширения linq для DataSets:
var imagePaths = dt.AsEnumerble().Select(r => r.Field<string>("ImagePath");
foreach(string imgPath in imagePaths)
{
TextBox1.Text = imgPath;
}
Ответ 4
Вышеприведенные примеры весьма полезны. Но если мы хотим проверить, имеет ли конкретная строка определенное значение или нет. Если да, то удалите и разбейте, и в случае отсутствия значения ошибки прямого броска. Ниже кода работает:
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 ";
}
}