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

だから私は間違った質問をしました。TemplateField列が使用されている場合でも、GridViewは実際には並べ替え可能であることがわかります。TemplateFieldは、BoundFieldタグで使用できるEncodeHtml属性をサポートしていません。これは、HeaderText属性を使用してTemplateFieldヘッダーで改行を強制することはできないことを意味します。このための解決策はHeaderTemplateを使用することですが、静的テキストを使用するだけでは、列を並べ替えることはできなくなります。

このリンクに解決策があります。

于 2009-12-20T16:12:49.703 に答える