Kendo ui 使用剑道UI网格,如何访问过滤和排序的数据?

Kendo ui 使用剑道UI网格,如何访问过滤和排序的数据?,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,我有一个剑道网格,可以排序和过滤。导出时,我希望导出当前可查看的所有数据,而不仅仅是当前页面 $(“#网格”).data(“kendoGrid”).dataSource->似乎是未排序和未筛选项的原始列表。在Chrome开发者工具中,\u数据和\u原始似乎是相同的 还有dataSource.view,但它只是当前页面上可见的10项 是否有办法访问排序列表和/或筛选列表 更新: 我在剑道论坛上找到了这个答案,我会看看它是否有用。 以下是访问过滤数据的方法: var dataSource = $(

我有一个剑道网格,可以排序和过滤。导出时,我希望导出当前可查看的所有数据,而不仅仅是当前页面

$(“#网格”).data(“kendoGrid”).dataSource
->似乎是未排序和未筛选项的原始列表。在Chrome开发者工具中,
\u数据
\u原始
似乎是相同的

还有
dataSource.view
,但它只是当前页面上可见的10项

是否有办法访问排序列表和/或筛选列表

更新: 我在剑道论坛上找到了这个答案,我会看看它是否有用。

以下是访问过滤数据的方法:

 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>";
  }
for(变量i=0;i
当只查看内存中的本地数据时,大多数答案都适用于剑道网格。如果您使用的是远程数据(例如,您的网格绑定到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();
          }
        });
      }   
var filteredRows=[];
函数getResults(){
var数据源=$(“#网格”).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(数据源、1、totalPages、筛选器、函数(){
$('#pResults').text('get'+filteredRows.length+'行过滤数据');
});            
}
函数PageTraverser(数据源、targetPage、totalPages、筛选器、completionFunction){
dataSource.query({
页码:targetPage,
页面大小:20,
过滤器:过滤器
}).然后(函数(){
var view=dataSource.view();
对于(var viewItemId=0;viewItemId如果(targetPage以下是我们目前的做法,尽管有多种选择:

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

您只需调用一个新查询并应用网格已应用的当前筛选器,即可返回与网格完全相同的结果。

我满足了将筛选数据导出为csv的相同要求,如果您成功从网格获取筛选和排序的数据,请与我们共享,感谢我的系统$(“#网格”)。data(“肯多格里德”).dataSource仅包含当前页的记录。我的配置是MVC,数据是从服务器获取的。我怀疑这是差异源。我尝试了您的解决方案,但它对我无效。dataSource仅包含当前页上显示的记录。也就是说,如果我有480条记录以48 pa显示如果每次设置为10个,我只会获得当前页面上显示的10条记录。您是否可以发布代码来显示网格初始化。您也可以在网格初始化期间添加的
filter
事件中使用此选项(它将过滤器作为函数中的参数传递)。但不使用
filter:dataSource.filter()
您可以使用
filter:arg.filter
将其设置为当前选定的筛选器。创建一个。谢谢!这似乎返回与网格相同的数据。例如,我有300行,它们以10页为单位显示。使用您的示例创建新的
myData
时,我只能获得前10行数据。问题是至少,我需要能够使用当前筛选器访问所有行。