我有一个返回几列的存储过程,我只对构建一个带有ProjectID
值为null的gridview感兴趣。我的代码返回所有列的所有行,它应该返回column = projectID。有人可以看看它。感谢
DataRowCollection rowCollection = spDataTable.Rows;
DataTable dt = new DataTable();
foreach (DataColumn col in spDataTable.Columns)
{
if (col.ColumnName == "ProjectID")
{
dt.Columns.Add(col.ColumnName);
lb_Test.Items.Add(col.ColumnName);
foreach(DataRow ros in col.Table.Rows)
{
foreach (object oObj in ros.ItemArray)
{
if (oObj != null)
{
if (col.ColumnName == "ProjectID")
{
lb_Test.Items.Add(oObj.ToString());
dt.Rows.Add(oObj);
}
}
else
{
lb_Test.Items.Add("Null");
}
}
}
grd_test.DataSource = dt;
grd_test.DataBind();
}
else
{
lb_Test.Items.Add("Not valid Name");
}
}
答案 0 :(得分:1)
如果我理解这个问题,看起来你需要的就是这个......
DataRowCollection rowCollection = spDataTable.Rows;
DataTable dt = new DataTable();
foreach(DataRow dr in spDataTable.Rows)
{
object projectId = dr["ProjectID"];
if (projectId == null)
{
dt.Rows.Add(dr);
}
}
这将使用ProjectID列中的值为null的所有行填充rowCollection。
话虽如此,如果可以,您可以考虑更改存储过程以仅返回所需的行。这样可以节省网络流量。
此外,DataTable具有内置过滤功能...... http://msdn.microsoft.com/en-us/library/zk13kdh0(v=vs.71).aspx。也许这是一种更好的方法。
DataViews还具有过滤数据的功能。然后你可以将GridView绑定到DataView ... https://stackoverflow.com/questions/10893860/how-to-filter-gridview-from-textbox
有几种方法可以过滤内置于.Net的DataTable。没有必要自己动手。