【问题标题】:Kendo UI: Excel Export not working correctly after datasource refreshing dataKendo UI:数据源刷新数据后 Excel 导出无法正常工作
【发布时间】:2015-02-06 23:56:44
【问题描述】:

我有一个 Grid,当用户点击一个按钮时,它会获取一些参数并刷新数据源:

var grdUP = $("#weblogGrid").data("kendoGrid");
grdUP.dataSource.transport.options.read.url = url; // new url

//Read data source to update
grdUP.dataSource.read();

它工作正常。新数据显示在网格中。并且网格有另一个按钮,它将数据导出到excel。我正在使用下面的代码(也尝试了内置按钮):

var grid = $("#weblogGrid").data("kendoGrid");
grid.saveAsExcel();

它实际上将数据导出到 excel 文件。

但是,它始终导出网格中的初始数据,而不是用户刷新的数据。

例如,当网格第一次出现时,它有 10 行数据。刷新后,它有 5 行数据。现在,如果导出,它仍然导出10行数据,尽管网格中的数据不同。

这是一个错误吗?或者,也许我在刷新网格中做错了什么?

谢谢

================================ 编辑以澄清一些事情

谢谢。目前,我使用以下方法获得了新数据:

var url = '/WeblogReport/GetWebLogList?fromDate=' + fromDate + '&toDate=' + toDate;
var grdUP = $("#myGrid").data("kendoGrid");
//Set url property of the grid data source
grdUP.dataSource.transport.options.read.url = url;
//Read data source to update
grdUP.dataSource.read();

所以我改成:

// get value of date
....

$.ajax({
    type: "GET",
    dataType: "json",
    url: "/WeblogReport/GetWebLogList",
    data: { FromDate: fromDate, ToDate: toDate },
    success: function (data) {
        alert(data);

        var grid = $("#myGrid").data("kendoGrid");

        grid.dataSource.data(data);
        grid.refresh();
    }
});

不知何故,它没有显示新数据。有什么建议?

非常感谢。


添加更多说明

这是在 Json 调用中。

success: function (data) {
    var newdata = [{ "UserName": "username", "ClientIP": "1.1.1.1"}];

    $("#myGrid").data("kendoGrid").dataSource.data(newdata);
    $("#myGrid").data("kendoGrid").refresh();

    //$("#myGrid").data("kendoGrid").saveAsExcel();
}

【问题讨论】:

    标签: kendo-ui kendo-grid kendo-asp.net-mvc


    【解决方案1】:

    设置以下两个字段以使 Excel 导出工作:

    grid.dataSource.transport.options.read.url = url;
    grid.options.dataSource.transport.read.url = url;
    

    【讨论】:

      【解决方案2】:

      检查一下:

      http://jsfiddle.net/Sowjanya51/o8cw3vj8/

      $('#grid1').data('kendoGrid').dataSource.data(newdata);  
      $('#grid1').data('kendoGrid').refresh();    
      

      您需要更新dataSource并重新加载网格,否则即使UI显示新数据,网格数据源仍然会引用旧数据。

      【讨论】:

      • 谢谢,它看起来很有希望。我在原始问题中添加了更多信息。有什么建议?不知何故,json调用是错误的?谢谢
      • grid.dataSource.data(data);这里的“数据”是一个数组吗? datasource 期望将一个数组传递给它。
      • 是的,它是一个数组。我什至将其设置为常量(请参阅原始帖子),但仍然无法正常工作。但是,您的示例有效。我试图在 Json 调用中调用 saveAsExcel 并作为默认按钮,但不起作用。似乎对旧数据的引用从未改变。我正在使用 Kendo UI MVC,可能是因为它?
      • 不,kendo UI MVC 应该不是问题。成功函数调用是否发生,如果发生,您是否看到任何控制台错误?
      【解决方案3】:

      只需将网格上的“allPages”选项设置为“True”。像这样:

      excel: {
          fileName: "Export.xlsx",
          filterable: true,
          allPages: true
      },
      

      【讨论】:

      【解决方案4】:

      如果您在从数据源读取后刷新网格,您的原始解决方案应该没问题。

      var grdUP = $("#weblogGrid").data("kendoGrid");
      grdUP.dataSource.transport.options.read.url = url; // new url
      
      //Read data source to update
      grdUP.dataSource.read();
      //add this line to refresh the active data set in the grid
      grdUP.refresh();
      

      我遇到了同样的问题,这为我解决了。您的方法和我的方法之间的唯一区别是您正在更改数据源的读取 URL,而我正在更改读取方法的数据参数。应该没什么区别,但我会提一下以防万一。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-05
        • 2016-09-01
        • 2015-10-03
        • 2013-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多