Exportation de toutes les données de la source de données Kendo Grid

J'ai suivi ce tutoriel sur l'exportation de Kendo Grid Data: http://www.kendoui.com/blogs/teamblog/posts/13-03-12/exporting_the_kendo_ui_grid_data_to_excel.aspx

Maintenant, j'essaie d'exporter toutes les données (pas seulement la page affichée) … Comment puis-je faire cela?

J'ai essayé de changer le pagezise avant d'obtenir les données:

grid.dataSource.pageSize(grid.dataSource.total()); 

Mais avec cela, mon rafraîchissement de la grille réelle avec une nouvelle pageSize. Est-ce une façon d'interroger la source de données kendo sans actualiser la grille?

Merci

Une meilleure solution est de générer un fichier Excel à partir des données réelles, et non à partir de DataSource.

1] Dans la page html, ajouter

 $('#export').click(function () { var title = "EmployeeData"; var id = guid(); var filter = $("#grid").data("kendoGrid").dataSource._filter; var data = { filter: filter, title: title, guid: id }; $.ajax({ url: '/Employee/Export', type: "POST", dataType: 'json', data: JSON.stringify(data), contentType: "application/json; charset=utf-8", success: function (result) { window.location = kendo.format("{0}?title={1}&guid={2}", '/Employee/GetGeneratedExcel', title, id); } }); }); 

2] Ajoutez une méthode "Exporter" au contrôleur:

 [HttpPost] public JsonResult Export(KendoGridFilter filter, string guid) { var gridRequest = new KendoGridRequest(); if (filter != null) { gridRequest.FilterObjectWrapper = filter.Filters != null ? filter.ToFilterObjectWrapper() : null; gridRequest.Logic = filter.Logic; } var query = GetQueryable().AsNoTracking(); var results = query.FilterBy<Employee, EmployeeVM>(gridRequest); using (var stream = new MemoryStream()) { using (var excel = new ExcelPackage(stream)) { excel.Workbook.Worksheets.Add("Employees"); var ws = excel.Workbook.Worksheets[1]; ws.Cells.LoadFromCollection(results); ws.Cells.AutoFitColumns(); excel.Save(); Session[guid] = stream.ToArray(); return Json(new { success = true }); } } } 

3] Ajoutez également la méthode "GetGeneratedExcel" au contrôleur:

 [HttpGet] public FileResult GetGeneratedExcel(string title, string guid) { // Is there a spreadsheet stored in session? if (Session[guid] == null) { throw new Exception(string.Format("{0} not found", title)); } // Get the spreadsheet from session. var file = Session[guid] as byte[]; string filename = string.Format("{0}.xlsx", title); // Remove the spreadsheet from session. Session.Remove(title); // Return the spreadsheet. Response.Buffer = true; Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", filename)); return File(file, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename); } 

Consultez également ce projet sur github .

Consultez ce projet d'exemple en direct où vous pouvez exporter les Employés vers Excel. (Bien que cela renvoie les données filtrées, mais vous pouvez modifier le code pour ignorer le filtre de la grille kendo et toujours renvoyer toutes les données.

Vraiment ancienne question mais:

Pour exporter toutes les pages, utilisez excel.allPages :

 $("#grid").kendoGrid({ toolbar: ["excel"], excel: { allPages: true }, // .... }); 

Voir l'exemple

Barre d'outils de grille

 .. .ToolBar(toolbar => { toolbar.Template( @<text> @Html.Kendo().Button().Name("grid-export").HtmlAttributes(new { type = "button", data_url = @Url.Action("Export") }).Content("Export").Events(ev => ev.Click("exportGrid")) </text>); }) .. 

Fonction d'exportation de point final

 public FileResult Export([DataSourceRequest]DataSourceRequest request) { DemoEntities db = new DemoEntities(); byte[] bytes = WriteExcel(db.Table.ToDataSourceResult(request).Data, new string[] { "Id", "Name" }); return File(bytes, "application/vnd.ms-excel", "GridExcelExport.xls"); } 

Une fonction javascript pour générer une URL d'exportation à distance de grille avec tous les paramètres spécifiés

 function exportGrid() { var toolbar = $(this.element); var gridSelector = toolbar.closest(".k-grid"); var grid = $(gridSelector).data("kendoGrid"); var url = toolbar.data("url"); var requestObject = (new kendo.data.transports["aspnetmvc-server"]({ prefix: "" })) .options.parameterMap({ page: grid.dataSource.page(), sort: grid.dataSource.sort(), filter: grid.dataSource.filter() }); url = url + "?" + $.param({ "page": requestObject.page || '~', "sort": requestObject.sort || '~', "pageSize": grid.dataSource.pageSize(), "filter": requestObject.filter || '~', }); window.open(url, '_blank'); } 

Pour une solution détaillée, consultez mon exemple de projet sur Github

Où vous pouvez exporter le côté du serveur de grille avec la configuration actuelle (tri, filtrage, pagination) à l'aide de la fonction helper