我按照关于导出Kendo网格数据的教程:http://www.kendoui.com/blogs/teamblog/posts/13-03-12/exporting_the_kendo_ui_grid_data_to_excel.aspx
现在我正在尝试导出所有数据(不仅仅是显示的页面)......我该怎么做?
我在尝试获取数据之前尝试更改pagezise:
grid.dataSource.pageSize(grid.dataSource.total());
但随着我的实际网格刷新与新pageSize.这是一种在不刷新网格的情况下查询kendo数据源的方法吗?
谢谢
更好的解决方案是从实际数据生成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); } }); });
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 }); } } }
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); }
另请参阅github上的这个项目.
请参阅此实例示例项目,您可以在其中将Employees导出到Excel.(虽然这会返回已过滤的数据,但您可以修改代码以忽略kendo网格过滤器并始终返回所有数据.