在其他条件相同的情况下,asp:GridView中的BoundField列是可排序的,但不是TemplateField列。这是为什么?
<asp:LinqDataSource ID="someDataSource" runat="server"
ContextTypeName="someDataContext" TableName="someTable"
OnSelecting="someSelectingHandler" />
<asp:GridView ID="somGrid" runat="server"
AllowPaging="true" AllowSorting="true"
EnableSortingAndPagingCallbacks="true" PageSize="15"
DataSourceID="someDataSource" EnableViewState="true"
EmptyDataText="No orders matched your criteria">
<Columns>
<!-- resulting column is sortable: -->
<asp:BoundField HeaderText="Order #" HtmlEncode="false"
DataField="order_number" SortExpression="order_number">
</asp:BoundField>
<!-- resulting column is not sortable: -->
<asp:TemplateField SortExpression="order_number">
<HeaderTemplate>Order #</HeaderTemplate>
<ItemTemplate><%# DataBinder.Eval(Container.DataItem,
"order_number")%></ItemTemplate>
</asp:TemplateField>
单击BoundField标题会导致回发,并调用我的Selecting事件处理程序。它只返回一个IQueryable,它本身不处理排序。 文档只是说“底层数据源必须支持排序”,以便GridView可以排序。显然,LinqDataSource支持排序,否则BoundField将不可排序。或者我错过了什么?
答案 0 :(得分:2)
所以我问了一个错误的问题。事实证明,即使使用TemplateField列,GridView实际上也是可排序的。 TemplateField不支持BoundField标记可用的EncodeHtml属性。这意味着无法使用HeaderText属性强制TemplateField标头中的换行符。使用HeaderTemplate是解决方案,但只使用静态文本,该列不再可排序。
This link有解决方案。