ASP.Net: сортировка, GridView BoundColumn против TemplateColumn - PullRequest
1 голос
/ 20 декабря 2009

При прочих равных условиях столбец BoundField в asp: GridView можно сортировать, а столбец 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 Ответ

2 голосов
/ 20 декабря 2009

Поэтому я задал не тот вопрос. Оказывается, что GridView действительно сортируем, даже когда используются столбцы TemplateField. TemplateField не поддерживает атрибут EncodeHtml, который доступен с тегом BoundField. Это означает, что невозможно принудительно разрывать строки в заголовках TemplateField с атрибутом HeaderText. Решением для этого является использование HeaderTemplate, но при использовании только статического текста столбец больше не сортируется.

Эта ссылка имеет решение.

...