代码之家  ›  专栏  ›  技术社区  ›  cdonner

ASP.Net:排序、GridView BoundColumn与TemplateColumn

  •  1
  • cdonner  · 技术社区  · 15 年前

    在其他条件相同的情况下,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>
    

    文档只是说“基础数据源必须支持排序”,以便GridView可以排序。显然,LinqDataSource支持排序,否则BoundField将不可排序。还是我遗漏了什么?

    1 回复  |  直到 15 年前
        1
  •  2
  •   cdonner    15 年前

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

    This link 有解决办法。