2014-12-02 2 views
5

У меня есть настраиваемая и фильтруемая сетка, которую я настроил для экспорта в Excel, используя новую функцию Kendo Grid Excel. Однако, даже когда я устанавливаю AllPages, я верю, что получаю только первые 10 результатов, независимо от того, для чего я установил страницу. Удаление атрибута Pageable дает мне полные результаты. У кого-нибудь еще есть проблемы с этим?Kendo Grid Export to 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); 
} 

Edit: я заметил, что изменение «PAGESIZE» атрибут источника данных изменяет количество строк в файле Excel. Похоже, что он всегда создает файл excel размером с Datasource-страницы, независимо от того, установлено ли значение AllPages равным true или что задано в сетке.

+0

Не уверен, имеет ли значение значение, но действие, на которое вы ссылаетесь в строке '.Excel()', не совпадает с именем указанного вами метода контроллера. –

+0

Я также заметил это. Но как только я это исправил, ничего не изменилось. Я также установил точку останова в методе, и он не сломался даже после того, как я изменил имя. –

+0

Я еще не использовал экспорт Excel. Я попробую это сегодня вечером. –

ответ

6

Выяснил, что это было, я делал неправильно. Проблема не в проблеме Excel, это было с моей сеткой в ​​целом. Я привязывал сетку к списку, который был частью моего 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()) 
    ) 
) 
+0

Я до сих пор не знаю, что вы сделали по-другому, потому что этот код точно такой же, как и ранее. У меня такая же проблема, и мой код очень похож на ваш. Когда я нажимаю на Экспорт в Excel, ничего не происходит :( – AlexFreitas

+0

@AlexFreitas - моя проблема не была в том, что ничего не сработало - это было то, что независимо от того, какой размер страницы я устанавливаю, он всегда выгружает только первые 10 строк в excel. это происходило в том, что я привязывал сетку к определенному объекту в моей модели, который был загружен только при загрузке и не менялся при изменении размера страницы. –

+0

Я приземлился на этой странице, потому что у меня была та же проблема: я связал Grid для модели, а также использовать Read-action для источника данных. Решение заключалось в том, чтобы не привязываться к модели. Вы можете сделать это, объявив Grid следующим образом: «@ (Html.Kendo()». Grid () « – roberth

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 –

+0

2.4.0 .. догадаться –

0

Использование @(Html.Kendo().Grid<TYPE>() вместо @(Html.Kendo().Grid(Model.CloudUsage). Таким образом, вы все равно можете определять столбцы на основе свойств используемого вами типа, это также преимущество перед @(Html.Kendo().Grid<dynamic>(), если вы знаете, каким будет ваш тип.

Смежные вопросы