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

 手机用户2602936643 发布于 2023-02-02 20:12

我按照关于导出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());

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

谢谢

1 个回答
  • 更好的解决方案是从实际数据生成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网格过滤器并始终返回所有数据.

    2023-02-02 20:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有