如何根据列类型(即绑定字段,模板字段等)过滤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然后再遍历它们
我不希望在所有可用列中运行循环..
答案 0 :(得分:0)
好吧,要过滤列,您必须查看每个列以检查列是否满足您的条件。所以你必须在任何情况下遍历所有这些,它可以是显式的,也可以是隐式的,但它就在那里。
你可以使用Linq这样的东西,
var filtered = CustomerGridView.Columns.Where(
column => column.GetType().Name == "Some column type" );
它返回一个IEnumerable(实际上是一个幕后的懒惰生成器),只有在你实际迭代它时才会得到它。