6

並べ替えとフィルタリングが可能な剣道グリッドがあります。エクスポートするとき、現在表示可能なすべてのデータをエクスポートしたいのですが、現在のページだけではありません。

$("#grid").data("kendoGrid").dataSource -> ソートもフィルタリングもされていない元のリストのようです。Chrome デベロッパー ツールでは_data_pristine同じようです。

もありますがdataSource.view、現在のページに表示されているのは 10 項目のみです。

ソートされたリストやフィルターされたリストにアクセスする方法はありますか?

更新:剣道フォーラムでこの回答を見つけました。役立つかどうかを確認します。 http://www.kendoui.c​​om/forums/framework/data-source/get-filtered-data-from-paged-grid.aspx

4

3 に答える 3

7

フィルタリングされたデータにアクセスする方法は次のとおりです。

 var dataSource = $("#grid").data("kendoGrid").dataSource;
        var filteredDataSource = new kendo.data.DataSource({
            data: dataSource.data(),
            filter: dataSource.filter()
        });

        filteredDataSource.read();
        var data = filteredDataSource.view();

そして、データをループできます:

 for (var i = 0; i < data.length; i++) {
            result += "<tr>";

            result += "<td>";
            result += data[i].SiteId;
            result += "</td>";

            result += "<td>";
            result += data[i].SiteName;
            result += "</td>";

            result += "</tr>";
  }
于 2014-01-17T18:56:55.160 に答える
2

そこにある答えのほとんどは、メモリ内のローカル データを見るだけで Kendo Grid に当てはまります。リモート データを使用している場合 (たとえば、グリッドが ODATA ソースにバインドされている場合)、フィルター処理されたデータを取得するには、すべてのページを反復処理する必要があります。

しかし、これは思ったほど簡単ではありませんでした。

私は次のことを思いつきました:

      var filteredRows = [];

      function getResults() {

        var dataSource = $("#grid").data("kendoGrid").dataSource;
        var filters = dataSource.filter();
        var allData = dataSource.data();
        var query = new kendo.data.Query(allData);
        var data = query.filter(filters).data;            

        var totalRowCount = parseInt(dataSource.total().toString());
        var totalPages = Math.ceil(totalRowCount / dataSource.pageSize());

        PageTraverser(dataSource, 1, totalPages, filters, function () {
                        $('#pResults').text('Got ' + filteredRows.length + ' rows of filtered data.');              
        });            
      }

      function PageTraverser(dataSource, targetPage, totalPages, filters, completionFunction) {

        dataSource.query({
          page: targetPage,
          pageSize: 20,
          filter: filters
        }).then(function () {
          var view = dataSource.view();
          for (var viewItemId = 0; viewItemId < view.length; viewItemId++) {
            var viewItem = view[viewItemId];
            filteredRows.push(viewItem);
          }
          targetPage++;
          if (targetPage <= totalPages) {
            PageTraverser(dataSource, targetPage, totalPages, filters, completionFunction);
          } else {
            completionFunction();
          }
        });
      }   

ここでの作業例: http://dojo.telerik.com/@JBoman32768/Ucudi

于 2015-03-17T02:59:34.987 に答える
1

複数のオプションがありますが、現在行っている方法は次のとおりです。

var myData = new kendo.data.Query(dataSource.data()).filter(dataSource.filter()).data;

新しいクエリを呼び出して、グリッドが適用した現在のフィルターを適用するだけで、グリッドとまったく同じ結果が返されます。

于 2016-11-18T13:30:56.603 に答える