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 回答