1

在其他条件相同的情况下,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 将无法排序。还是我错过了什么?

4

1 回答 1

2

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

这个链接有解决方案。

于 2009-12-20T16:12:49.703 回答