2012-10-10 28 views
1

確定具體的行和列我有一個存儲過程返回幾列,我只是在建設與ProjectID值是零一個gridview感興趣。我的代碼如下返回所有列的所有行,它應該返回where 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"); 
       } 
} 
+1

每一行包含一個名爲「專案編號」 –

+0

列@jpavlov過濾的行,空VS從數據層不是你的UI層不爲空。 – JonH

回答

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); 
     } 
    } 

這將填充所有的行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數據表。沒有必要推出自己的。

+0

我無法添加到rowCollection,與此 – jpavlov

+0

@jpavlov對不起......我認爲它應該是「dt.Rows.Add(dr)」。話雖如此,請考慮替代方案。最好使用內置的過濾功能,而不是自己的過濾功能。更靈活。 –