我有一个可分页和可过滤的网格,我设置为使用新的Kendo Grid Excel功能导出到Excel。但是,即使我将AllPages设置为true,我也只得到前10个结果,无论我将pagesize设置为什么。删除Pageable属性给了我完整的结果。其他人有问题吗?
这是我网格的设置。
@(Html.Kendo().Grid(Model.CloudUsage)
.Name("PCloudUsages")
.ToolBar(toolbar =>
{
toolbar.Excel().HtmlAttributes(new { @class = "toolbar-field" });
})
.Columns(columns =>
{
columns.Bound(c => c.ProjectCode).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains").ShowOperators(false)));
columns.Bound(c => c.ProjectName).Title("ProjectName").Filterable(ftb => ftb.Cell(cell => cell.Operator("contains").ShowOperators(false)));
})
.Pageable(p => p.ButtonCount(5).PageSizes(new int[] { 10, 20, 50, 100 }))
.Filterable(ftb => ftb.Mode(GridFilterMode.Row))
.Sortable()
.Excel(excel => excel.FileName("CloudUsages.xlsx").Filterable(true).ProxyURL(Url.Action("ExportExcel", "Admin")).AllPages(true))
.DataSource(source => source
.Ajax()
.Model(m => m.Id(itm => itm.ProjectName))
.Read(read => read.Action("PCloudUsages_Read", "Admin").Data("GetDates"))
.Sort(sort => sort.Add(itm => itm.ProjectName).Descending())
)
)
控制器方法
public ActionResult ExportExcel(string contentType, string base64, string fileName)
{
var fileContents = Convert.FromBase64String(base64);
return File(fileContents, contentType, fileName);
}
编辑:我注意到更改" pageSize"数据源的属性更改excel文件中的行数。因此,无论AllPages设置为true,还是将网页大小设置为网格,它似乎总是生成Datasource Pagesize大小的excel文件。
答案 0 :(得分:8)
弄清楚我做错了什么。问题不在于Excel问题,而是在我的网格中。我正在将网格绑定到List,这是我的ViewModel的一部分,它正在页面加载时填充。我应该将数据留空,只指定网格的类型。这样,Read Action会在网格加载时以及生成excel时获取数据。新代码应如下所示:
@(Html.Kendo().Grid<CloudUsages>()
.Name("PCloudUsages")
.ToolBar(toolbar =>
{
toolbar.Excel().HtmlAttributes(new { @class = "toolbar-field" });
})
.Columns(columns =>
{
columns.Bound(c => c.ProjectCode).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains").ShowOperators(false)));
columns.Bound(c => c.ProjectName).Title("ProjectName").Filterable(ftb => ftb.Cell(cell => cell.Operator("contains").ShowOperators(false)));
})
.Pageable(p => p.ButtonCount(5).PageSizes(new int[] { 10, 20, 50, 100 }))
.Filterable(ftb => ftb.Mode(GridFilterMode.Row))
.Sortable()
.Excel(excel => excel.FileName("CloudUsages.xlsx").Filterable(true).ProxyURL(Url.Action("ExportExcel", "Admin")).AllPages(true))
.DataSource(source => source
.Ajax()
.Model(m => m.Id(itm => itm.ProjectName))
.Read(read => read.Action("PCloudUsages_Read", "Admin").Data("GetDates"))
.Sort(sort => sort.Add(itm => itm.ProjectName).Descending())
)
)
答案 1 :(得分:6)
I landed on this page for the search "Kendo mvc grid export to excel not working" But the scenario here is different. For people like me I am posting the possible solution
您必须错过jszip.min.js文件参考
<script src="~/Scripts/kendo/jszip.min.js"></script>
答案 2 :(得分:0)
使用@(Html.Kendo().Grid<TYPE>()
代替@(Html.Kendo().Grid(Model.CloudUsage)
。这样,您仍然可以根据所使用类型的属性定义列,如果您知道自己的类型,这也优于@(Html.Kendo().Grid<dynamic>()
。