如何根据列类型过滤Gridview列

时间:2014-02-18 08:29:57

标签: c# asp.net 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>

现在我想只浏览所有的boundfields(因此应该过滤掉最后2列)。

我知道可以通过遍历gridview的所有列并检查列类型(使用grdView.Columns[ct].GetType().Name;)来完成,但在我的实际场景中,它可能有25到30列,所以 dnt想要遍历所有列,但希望先过滤掉boundfileds然后再遍历它们

我不希望在所有可用列中运行循环..

1 个答案:

答案 0 :(得分:0)

好吧,要过滤列,您必须查看每个列以检查列是否满足您的条件。所以你必须在任何情况下遍历所有这些,它可以是显式的,也可以是隐式的,但它就在那里。

你可以使用Linq这样的东西,

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

它返回一个IEnumerable(实际上是一个幕后的懒惰生成器),只有在你实际迭代它时才会得到它。