Как выполнять итерацию с помощью 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"]);
}

Я пишу это из памяти.
Надеюсь, это даст вам достаточно намека на понимание объектной модели.

DataTableDataRowCollectionDataRow (который можно использовать и искать содержимое столбца для этой строки, используя имя столбца или порядковый номер).

- >= содержит.

Ответ 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 ";
            }
        }