2014-02-18 59 views
1

如何列型的基礎上進行過濾的GridView列(即綁定字段,模板字段等等)如何篩選列類型的基礎

假設我有以下一個gridview上的GridView列代碼

<asp:gridview id="CustomersGridView" 
     datasourceid="CustomersSource" 
     autogeneratecolumns="true" 
     emptydatatext="No data available." 
     runat="server"> 

     <columns> 
      <asp:boundfield datafield="CustomerID" headertext="Customer ID"/> 
      <asp:boundfield datafield="CompanyName" headertext="Company Name"/> 
      <asp:boundfield datafield="Address" headertext="Address"/> 
      <asp:boundfield datafield="City" headertext="City"/> 
      <asp:boundfield datafield="PostalCode" headertext="Postal Code"/> 
      <asp:boundfield datafield="Country" headertext="Country"/> 

     <asp:templatefield headertext="Author Name"> 
     <itemtemplate> 
      <asp:label id="FirstNameLabel" 
      Text= '<%# Eval("au_fname") %>' 
      runat="server"/> 
      <asp:label id="LastNameLabel" 
      Text= '<%# Eval("au_lname") %>' 
      runat="server"/> 
     </itemtemplate> 
     </asp:templatefield> 

     <asp:hyperlinkfield text="Details..." 
     navigateurl="~\details.aspx"    
     headertext="Order Details" 
     target="_blank" /> 
     </columns> 

     </asp:gridview> 

現在我想穿過所有的綁定字段(所以最後2列應該被過濾掉)。

我知道它可以通過一個GridView的所有列去和檢查列型(grdView.Columns[ct].GetType().Name;),但在我的實際情況可以有25來完成 - 30列,以便DNT想通過所有列運行,但要過濾出boundfileds,然後再通過他們跑

我不想貫穿所有可用的列循環..

回答

0

好,過濾柱,你要看看他們每個人的檢查列是否滿足您的條件。因此,無論如何你必須循環遍歷它們,它可以是明確的或隱含的,但它在那裏。

您可以使用LINQ類似的東西,

var filtered = CustomerGridView.Columns.Where( 
    column => column.GetType().Name == "Some column type"); 

它返回一個IEnumerable(實際上,在幕後懶發電機),其中只有當你真正迭代它被評估。

+0

ya但如果它是隱式的,它將被優化..否則爲什麼我們使用ds.clone和ds.copy以及所有這些函數......當我們想要過濾特定列的東西時我們將使用ds。過濾器不會掃描數據集中的所有行。所以想要檢查是否有任何隱式方式 – Dhaval

+0

主要是ds.clone和ds.copy與隱藏常用操作的實現有關。由於沒有用於過濾列的實現,所以您可以推出自己的或使用Linq。看到我的答案。 – Kaerber

+0

是啊我知道...我需要遍歷所有列,因爲我在我的問題中顯示... – Dhaval