ASP.Net:排序,GridView BoundColumn与TemplateColumn

时间:2009-12-20 15:53:59

标签: gridview sorting linqdatasource templatefield

在其他条件相同的情况下,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将不可排序。或者我错过了什么?

1 个答案:

答案 0 :(得分:2)

所以我问了一个错误的问题。事实证明,即使使用TemplateField列,GridView实际上也是可排序的。 TemplateField不支持BoundField标记可用的EncodeHtml属性。这意味着无法使用HeaderText属性强制TemplateField标头中的换行符。使用HeaderTemplate是解决方案,但只使用静态文本,该列不再可排序。

This link有解决方案。