我们有一个带有多个控件的MVC剃刀视图。我们需要在导出到Excel内容中复制Razor视图布局。所以我使用OpenXML在Excel中复制视图。
但现在我们收到了一个新的请求,要求在视图中添加额外的部分以显示DevExpress MVC Grid。
我们如何将DevExpress MVC网格排序/分页/过滤内容合并到OpenXML?我在会话中有网格内容。但我想在此网格的UI中显示用户选择的内容(过滤/排序/分页)。
任何人都可以帮我解决上述问题。
提前感谢您的帮助。
答案 0 :(得分:1)
我使用以下过程解决了我的问题:
我在用户点击导出到Excel时发布了表单:
$(function () {
$('a#lkDealExport').click(
(function (e) {
var originalAction = $(this).parents('form#DataFrm').attr('action');
$('form#DataFrm').attr("action", $(e.target).attr("data-formaction"));
$('form#DataFrm').submit();
$('form#DataFrm').attr("action", originalAction); // reset the action back to orginal action after the export to excel is executed.
return false;
})
);
});
如果我们不发布表单,devExpress网格用户选择(排序,分页和过滤)不会导出到Excel。
在post action方法中,我包含以下代码:
using (MemoryStream stream = new MemoryStream())
{
if (EventListModel.gridData.Count() > 0) // This will avoid exporting header information when search returns 0 results.
{
GridViewExtension.WriteXlsx(SubmissionGridViewHelper.Instance.Settings, EventListModel.gridData, stream);
}
然后我们可以将这个MemoryStream传递给正在加载openXML的方法
if (eventLogStream.Length > 0) // Insert data into excel only when memory stram is not empty.
{
XLWorkbook eventLogWorkBook = new XLWorkbook(eventLogStream);
var firstPossibleAddres = eventLogWorkBook.Worksheet(1).FirstCellUsed().Address;
var lastPossibleAddress = eventLogWorkBook.Worksheet(1).LastCellUsed().Address;
worksheet.Cell(++rowIndex, 1).Value = eventLogWorkBook.Worksheet(1).Range(firstPossibleAddres, lastPossibleAddress).RangeUsed();
rowIndex += eventLogWorkBook.Worksheet(1).Range(firstPossibleAddres, lastPossibleAddress).RowCount();
}
希望这对其他人有所帮助。