从Kendo Grid数据源导出所有数据

Pau*_*aul 5 javascript kendo-ui kendo-grid

我按照关于导出Kendo网格数据的教程:http://www.kendoui.c​​om/blogs/teamblog/posts/13-03-12/exporting_the_kendo_ui_grid_data_to_excel.aspx

现在我正在尝试导出所有数据(不仅仅是显示的页面)......我该怎么做?

我在尝试获取数据之前尝试更改pagezise:

grid.dataSource.pageSize(grid.dataSource.total());
Run Code Online (Sandbox Code Playgroud)

但随着我的实际网格刷新与新pageSize.这是一种在不刷新网格的情况下查询kendo数据源的方法吗?

谢谢

Ste*_*ath 5

更好的解决方案是从实际数据生成Excel文件,而不是从dataSource生成.

1]在html页面中,添加

$('#export').click(function () {
    var title = "EmployeeData";
    var id = guid();
    var filter = $("#grid").data("kendoGrid").dataSource._filter;

    var data = {
        filter: filter,
        title: title,
        guid: id
    };

    $.ajax({
        url: '/Employee/Export',
        type: "POST",
        dataType: 'json',
        data: JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            window.location = kendo.format("{0}?title={1}&guid={2}", '/Employee/GetGeneratedExcel', title, id);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)


2]向控制器添加"导出"方法:

[HttpPost]
public JsonResult Export(KendoGridFilter filter, string guid)
{
    var gridRequest = new KendoGridRequest();
    if (filter != null)
    {
        gridRequest.FilterObjectWrapper = filter.Filters != null ? filter.ToFilterObjectWrapper() : null;
        gridRequest.Logic = filter.Logic;
    }

    var query = GetQueryable().AsNoTracking();
    var results = query.FilterBy<Employee, EmployeeVM>(gridRequest);

    using (var stream = new MemoryStream())
    {
        using (var excel = new ExcelPackage(stream))
        {
            excel.Workbook.Worksheets.Add("Employees");
            var ws = excel.Workbook.Worksheets[1];
            ws.Cells.LoadFromCollection(results);
            ws.Cells.AutoFitColumns();

            excel.Save();
            Session[guid] = stream.ToArray();
            return Json(new { success = true });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


3]还将方法"GetGeneratedExcel"添加到控制器:

[HttpGet]
public FileResult GetGeneratedExcel(string title, string guid)
{
    // Is there a spreadsheet stored in session?
    if (Session[guid] == null)
    {
        throw new Exception(string.Format("{0} not found", title));
    }

    // Get the spreadsheet from session.
    var file = Session[guid] as byte[];
    string filename = string.Format("{0}.xlsx", title);

    // Remove the spreadsheet from session.
    Session.Remove(title);

    // Return the spreadsheet.
    Response.Buffer = true;
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", filename));
    return File(file, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}
Run Code Online (Sandbox Code Playgroud)

另请参阅github上的这个项目.

请参阅实例示例项目,您可以在其中将Employees导出到Excel.(虽然这会返回已过滤的数据,但您可以修改代码以忽略kendo网格过滤器并始终返回所有数据.