7

バックグラウンド:

私はGridViewとObjectDataSourceを使用しています。ページングと並べ替えを実装しています。

ObjectDataSourceの場合:

        objectDataSource.TypeName = value;
        objectDataSource.SelectMethod = "Select";
        objectDataSource.SelectCountMethod = "SelectCount";
        objectDataSource.SortParameterName = "sortExpression";
        objectDataSource.EnablePaging = true;

GridViewの場合:

        gridView.AllowPaging = true;
        gridView.AllowSorting = true;
        gridView.DataSource = objectDataSource;

ページングと並べ替えを機能させるために、「EnableSortingAndPagingCallbacks」をTrueに設定しました。以前、「System.Web.HttpException:処理されなかったGridView起動イベントSorting」が発生していました。そしてこれはそれを修正します。

GridViewでBoundFieldsのみを使用する場合、これは素晴らしく、正常に機能します。

ただし、TemplateFieldsを使用した場合、「NotSupportedException:一部のコントロールがコールバックで正しく更新できないため、コールバックはTemplateFieldでサポートされていません。GridViewでコールバックをオフにしてください。」が表示されます。

これは理にかなっています。EnableSortingAndPagingCallbacksを使用せずに、並べ替えを機能させる方法を知る必要があります。

EnableSortingAndPagingCallbacks = Trueの場合:

  • ページングワークス
  • 仕分け作業
  • BoundFieldsは機能します
  • TemplateFieldsが機能しない

EnableSortingAndPagingCallbacks = Falseの場合:

  • ページングワークス
  • 並べ替えが機能しない
  • BoundFieldsは機能します
  • TemplateFieldsは機能します

私の質問:

Paging、Sorting、およびTemplateFieldsをすべて同時に機能させるにはどうすればよいですか?


実装の明確化:

GridViewでObjectDataSourceを使用するには、ソート式、返される行数、および開始行を提供するSelectというメソッドを実装する必要があります。

    public IEnumerable<CountyAndStateGridRow> Select(string sortExpression, int maximumRows, int startRowIndex)
    {
        string oql = "select County order by {" + sortExpression + "}" ;

        var counties = QueryProvider.ExecuteQuery(oql).Cast<County>();

        var page = counties.Skip(startRowIndex).Take(maximumRows);

        var rows = page.Select(
            county => new CountyAndStateGridRow
            {
                CountyName = county.Name,
                StateName = county.State.Name,
            });

        return rows;
    }

特定のSortExpressionは、aspx/ascxで定義されています。

<Columns>
       <asp:BoundField HeaderText="County Name" DataField="CountyName" SortExpression="Name" />
       <asp:BoundField HeaderText="State Name" DataField="StateName" SortExpression="State.Name" />
</Columns>

これは、列がクリックされたときに渡され、ObjectDataSourceのSelectメソッドを呼び出すことになっていますが、EnableSortingAndPagingCallbacks = trueの場合は機能しないようで、代わりに、Sortingイベントが定義されていないという例外が発生します。

4

3 に答える 3

0

プロパティ EnableSortingAndPagingCallbacks は、コントロールがページ ポストバックなしで自動的に並べ替えるように見えるように、クライアント側でデータの並べ替えを行うようにコントロールに指示します。TemplateFields は、このメソッドではサポートされていません。TemplateFields を使用して並べ替えを実行するには、GridView.Sorting イベントを接続し、AllowSorting プロパティを true に設定する必要があります。これが完了すると、列ヘッダーがクリックされたときにイベントが発生し、そこから並べ替えロジックを処理できるようになります。

于 2009-06-17T13:29:01.470 に答える
0

SortExpression の値を DataField の値に変更します。AllowPaging と AllowSorting を true に設定します。EnableSortingAndPagingCallbacks を true に設定します。

于 2014-07-25T14:16:43.903 に答える