如何基于列类型(即绑定字段、模板字段等)过滤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>
现在我只想运行所有的边界字段(所以最后两列应该被过滤掉)。
我知道这可以通过遍历网格视图的所有列并检查列类型(使用grdView.Columns[ct].GetType().Name;
)来完成,但是在我的实际场景中,它可能有25-30个列,所以不想运行所有列,而是希望先过滤出边界文件,然后运行它们()。
我不想在所有可用的列中循环。
发布于 2014-02-18 01:03:24
要过滤列,您必须查看其中的每一列,以检查该列是否满足您的条件。所以在任何情况下,你都必须循环它们,它可以是显式的,也可以是隐式的,但它是存在的。
你可以用Linq做类似的事,
var filtered = CustomerGridView.Columns.Where(
column => column.GetType().Name == "Some column type" );
它返回一个IEnumerable (实际上,幕后的一个延迟生成器),只有当您实际迭代它时,它才会得到评估。
https://stackoverflow.com/questions/21848017
复制相似问题