C# 从存储过程构建定义特定列和行的网格

C# 从存储过程构建定义特定列和行的网格,c#,asp.net,C#,Asp.net,我有一个返回几列的存储过程,我只对使用ProjectID值为null的gridview感兴趣。下面我的代码返回所有列的所有行,它应该只返回column=projectID的位置。有人能看一下吗。谢谢 DataRowCollection rowCollection = spDataTable.Rows; DataTable dt = new DataTable(); foreach (DataColumn col in spDataTable.Columns) {

我有一个返回几列的存储过程,我只对使用
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");
                }
}

如果我理解这个问题,你需要的似乎就是这个

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还具有内置的筛选功能。。。。也许这是一个更好的方法

DataView还具有过滤数据的功能。然后可以将GridView绑定到DataView。。。


有几种方法可以过滤内置在.Net中的数据表。没有必要自己动手。

如果我理解这个问题,你需要的似乎就是这个

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还具有内置的筛选功能。。。。也许这是一个更好的方法

DataView还具有过滤数据的功能。然后可以将GridView绑定到DataView。。。


有几种方法可以过滤内置在.Net中的数据表。无需自行滚动。

每一行都包含一个名为“projectd”@jpavlov的列,从您的数据层而非UI层筛选空与非空的行。每一行都包含一个名为“projectd”@jpavlov的列,从您的数据层而非UI层筛选空与非空的行。我无法添加到rowCollection,具有this@jpavlov对不起…我想应该是“dt.Rows.Add(dr)”。话虽如此,请考虑其他选择。最好使用内置的过滤功能,而不是自己滚动。更灵活。我无法添加到rowCollection,但this@jpavlov对不起…我想应该是“dt.Rows.Add(dr)”。话虽如此,请考虑其他选择。最好使用内置的过滤功能,而不是自己滚动。更加灵活。