5

KendoUI が追加する拡張メソッド (ToDataSourceResult) は、Pages > Page #1 で失敗するようです。ページが初めて読み込まれたときは正常に動作しますが、仮想スクロールで使用してページをフェッチしようとすると、2,3,4 ... N 非同期に、メソッドは IEnumerable オブジェクトのすべてのデータを無視します変換するには。

私のコードは次のとおりです。

次のようなデータを取得する MVC コントローラーがあります。

Database database = Database.GenerateDatabase();
ResultSet queryResults = database.GetEvents( 
    FilterHelper.GenerateQueryCriteria((List<IFilterDescriptor>) request.Filters, request.Page, request.PageSize) 
);

Database.GetEvents は次のようなオブジェクトを返します。

public class ResultSet {

    public List<ResultSetRow> Set;
    public int PageRowCount;
    public int TotalRecordCount;
}

各 ResultSetRow は、プロパティとして 1 つの文字列と 2 つの int を持つクラスのインスタンスです。

この時点で、ブレーク ポイントを設定し、ResultSet.Set の内容を調べます。データベースは、request.PageSize で指定した数のレコードを List に適切に入力しています。すべてのページ番号に対して結果が返されていることを確認しました。

次の段階では、すべてがうまくいきません。

DataSourceResult result = ((IEnumerable<ResultSetRow>) queryResults.Set).ToDataSourceResult(request);

DataSourceResult オブジェクトの内容を調べたところ、その配列プロパティ 'Data' が空です。

モデル (ResultSetRow) が Kendo の DataSourceResult オブジェクトに変換できないのはなぜですか?

いくつかの追加情報:

  • 集計、グループ、並べ替え、およびフィルターは使用されていません。
  • Database.GetEvents によって返される結果の数は、要求されたページのサイズと一致します。

ご協力ありがとうございます SO コミュニティ

4

1 に答える 1

11

使用する主な理由ToDataSourceResult()は、データベースサーバーでフィルタリング/順序付け/グループ化/ページングを実行することです。IQueryableそのため、まだ実行されていないが与えられた場合に最適に機能します。

で機能しIEnumerableますが、テーブル全体をメモリにロードする必要があります。これはスケーラブルではありません。

1ページ分のデータしか取得できないため、ToDataSourceResultが呼び出されると、それがデータベース内のすべてのデータであると見なされ、最初のページ以外のページの空のリストが返されます。

于 2013-01-12T17:42:06.787 に答える