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