2014-12-02 33 views
5

我有一個可分頁和可過濾的網格,我使用新的Kendo Grid Excel功能將其設置爲導出到Excel。但是,即使我將AllPages設置爲true,我也只能得到前10個結果,無論我設置的頁面大小如何。刪除Pageable屬性給了我完整的修復。任何人都有這個問題?Kendo Grid導出到Excel - 所有頁面不工作

這是我的網格設置。

@(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還是頁面大小設置爲網格大小,它都會生成數據源頁面大小的Excel文件。

+0

不確定它是否重要,但您在'.Ex​​cel()'行中引用的操作與您列出的控制器方法不同。 – 2014-12-02 17:12:13

+0

我也注意到了這一點。但是一旦我修好它,沒有什麼改變。我也在該方法中設置了一個斷點,並且在我更改了名稱後它也沒有中斷。 – 2014-12-02 17:29:51

+0

我還沒有使用Excel導出。我今晚會嘗試。 – 2014-12-02 17:30:49

回答

6

找出我做錯了什麼。問題不在於Excel問題,而在於我的網格。我將網格綁定到一個List,這個List是ViewModel的一部分,這個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()) 
    ) 
) 
+0

我仍然不知道你做了什麼不同,因爲這段代碼和你之前發佈的代碼完全一樣。我遇到同樣的問題,我的代碼與您的代碼非常相似。當我點擊導出到Excel時,什麼也沒有發生:( – AlexFreitas 2015-02-14 15:12:12

+0

@AlexFreitas - 我的問題不是沒有任何工作 - 而是,無論我設置了什麼頁面大小,它總是隻卸載前10行到excel中。發生這種情況的原因是我將網格綁定到了我的模型中的一個特定對象,這個對象只在加載時被取出,並且在頁面大小發生變化時沒有改變。 – 2015-02-17 14:55:30

+0

我登陸這個頁面是因爲我遇到了同樣的問題:網格到模型,並使用數據源讀取操作,解決方案是不綁定到模型,你可以通過這樣聲明網格來實現:「@(Html.Kendo()。Grid ()」 – roberth 2015-05-12 12:16:25

5

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> 
+0

它依賴於什麼版本?3.0似乎不起作用, 2.0 – 2016-06-08 19:04:13

+0

2.4.0 .. 弄清楚了 – 2016-06-08 19:06:50

0

使用@(Html.Kendo().Grid<TYPE>()而不是@(Html.Kendo().Grid(Model.CloudUsage)。這樣,您仍然可以根據您使用的類型的屬性定義列,但如果您知道自己的類型是什麼,則這比@(Html.Kendo().Grid<dynamic>()更具優勢。