我需要遍历DataTable
。我有一个名为ImagePath
的列。
当我使用DataReader
时,我这样做:
SqlDataReader dr = null;
dr = cmd.ExecuteReader();
while (dr.Read())
{
TextBox1.Text = dr["ImagePath"].ToString();
}
如何使用DataTable
实现相同的目标?
答案 0 :(得分:247)
DataTable dt = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
foreach(DataRow row in dt.Rows)
{
TextBox1.Text = row["ImagePath"].ToString();
}
...假设连接已打开且命令设置正确。我也没有检查语法,但它应该给你一个想法。
答案 1 :(得分:29)
foreach (DataRow row in myDataTable.Rows)
{
Console.WriteLine(row["ImagePath"]);
}
我是从记忆中写下来的 希望这能为您提供足够的提示来理解对象模型。
DataTable
- > DataRowCollection
- > DataRow
(使用columnName或ordinal,可以使用&查找该行的列内容)。
- > =包含。
答案 2 :(得分:20)
您还可以对DataSet使用linq扩展:
var imagePaths = dt.AsEnumerble().Select(r => r.Field<string>("ImagePath");
foreach(string imgPath in imagePaths)
{
TextBox1.Text = imgPath;
}
答案 3 :(得分: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 ";
}
}
答案 4 :(得分:2)
已经给出了很好的解决方案。下面的代码可以帮助其他人查询datatable并获取ImagePath列的datatable每一行的值。
for (int i = 0; i < dataTable.Rows.Count; i++)
{
var theUrl = dataTable.Rows[i]["ImagePath"].ToString();
}