【问题标题】:Kendo Grid Export to Excel -All Pages not working剑道网格导出到 Excel - 所有页面都不起作用
【发布时间】:2015-01-30 22:08:33
【问题描述】:

我有一个可分页和可过滤的网格,我设置为使用新的 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 文件中的行数。所以它似乎总是生成数据源页面大小大小的 excel 文件,无论 AllPages 是否设置为 true,或者页面大小在网格上设置为什么。

【问题讨论】:

  • 不确定是否重要,但您在 .Excel() 行中引用的操作与您列出的控制器方法的名称不同。
  • 我也注意到了这一点。但是一旦我修好它,什么都没有改变。我还在方法中设置了一个断点,即使我更改名称后它也没有中断。
  • 我还没有使用 Excel 导出。今晚我会试试看。

标签: asp.net-mvc razor kendo-ui kendo-grid kendo-asp.net-mvc


【解决方案1】:

弄清楚我做错了什么。问题不在于 Excel 问题,而在于我的网格。我将网格绑定到一个列表,该列表是我的 ViewModel 的一部分,该列表在页面加载时被填充。我应该把数据留空,只指定网格的类型。这样,读取操作会在加载网格和生成 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())
     )
)

【讨论】:

  • 我仍然不知道你做了什么不同,因为这段代码和你之前发布的完全一样。我有同样的问题,我的代码和你的非常相似。当我点击导出到 Excel 时,什么也没有发生 :(
  • @AlexFreitas - 我的问题不是没有任何效果 - 无论我设置什么页面大小,它总是只将前 10 行卸载到 excel 中。发生这种情况的原因是我将网格绑定到模型中的特定对象,该对象仅在加载时获取,并且在页面大小更改时不会更改。
  • 我登陆这个页面是因为我遇到了同样的问题:我确实将 Grid 绑定到了 Model 并且还使用了 Datasource Read-action。解决方案是不绑定到模型。您可以通过以下方式声明 Grid 来做到这一点:“@(Html.Kendo().Grid()”
  • 换行@(Html.Kendo().Grid(Model.CloudUsage) -> @(Html.Kendo().Grid&lt;CloudUsages&gt;()
【解决方案2】:

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>

【讨论】:

【解决方案3】:

使用@(Html.Kendo().Grid&lt;TYPE&gt;() 代替@(Html.Kendo().Grid(Model.CloudUsage)。这样你仍然可以根据你使用的类型的属性定义列,如果你知道你的类型是什么,这也是 @(Html.Kendo().Grid&lt;dynamic&gt;() 的优势。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2017-10-25
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多