当试图将超过4000条记录导出为Excel时,Telerik Kendo网格导出到excel没有响应

时间:2016-02-02 17:49:00

标签: excel telerik-grid

当试图将超过4000条记录导出为ex​​cel时,Kendo grid-export to excel没有响应...它甚至没有抛出错误消息......有人可以建议或建议解决此问题。

以下是Kendo网格的代码

                            @(Html.Kendo().Grid(Model)
        .Name("Billinggrid")

        .Columns(columns =>
        {
            columns.Bound(c => c.groupid).Width(75).Filterable(true).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.groupname).Width(125).Filterable(true).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.groupeffectivedate).Width(90).Filterable(true).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.recipientdatareceived).Width(95).Filterable(true).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.recipientsent).Width(100).Filterable(true).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.accountmanager).Width(125).Filterable(true).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.billinggroup).Width(75).Filterable(true).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.reportyearmonth).Width(85).Filterable(true).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.recordcount).Width(55).Filterable(false).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.datafilecount).Width(50).Filterable(false).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.datacharge).Format("{0:c}").Filterable(false).Sortable(false).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.printcharge).Format("{0:c}").Filterable(false).Sortable(false).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.insertcharge).Format("{0:c}").Filterable(false).Sortable(false).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.envelopecharge).Format("{0:c}").Filterable(false).Sortable(false).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
            columns.Bound(c => c.postage).Format("{0:c}").Filterable(false).Sortable(false);
            columns.Bound(c => c.total).Format("{0:c}").Filterable(false).Sortable(false);
            columns.Bound(c => c.postageremaining).Width(95).Format("{0:c}").Filterable(true).Sortable(true).HeaderHtmlAttributes(new { style = "overflow: visible; white-space: normal" });
        })

        .Resizable(resizable => resizable.Columns(true))
        .Reorderable(reorderable => reorderable.Columns(true))
        .Pageable(pager => pager.PageSizes(new int[] { 10, 25, 50, 100, 500 })
            .Messages(messages => messages.ItemsPerPage(" items displayed"))
            )
        .Sortable()
        .Scrollable(scr => scr.Height("auto"))
        .HtmlAttributes(new { style = "Font-size:x-small" })

        //.ToolBar(tools => tools.Excel())
        .Excel(excel => excel
            .FileName("Billing_Report-" + DateTime.Now + ".xlsx")
            .AllPages(true)
            //.Filterable(true)
            .ProxyURL(Url.Action("Excel_Export_Save", "Report"))
            )
        //.Filterable(ftb => ftb.Mode(GridFilterMode.Row))

        .ToolBar(toolbar =>

1 个答案:

答案 0 :(得分:0)

来自telerik论坛System Out of Memory

的帖子

当OpenAccess执行查询时,结果的实际检索将拆分为块。有一个提取大小,用于确定一次传递从数据库中读取的记录数。使用返回大量记录的查询,这意味着不会超过提取大小,并且不会在内存中一次检索所有40 000条记录。迭代结果数据,您将从数据库中获得多次读取,直到迭代结束。但是,当您遍历结果集时,在保留对迭代对象的引用时会累积后续读取。 当您使用网格中的所有记录进行操作时,可能会导致内存不足异常。避免这种错误的方法是使用块中的数据。例如,网格的分页和从所有页面顺序导出数据的选项将实现此目的。目标是尝试减少一次保留在内存中的对象,并让垃圾收集释放不需要的内存。带有Skip()和Take()的LINQ查询非常适用于内存中所有数据都很昂贵的情况。