If anybody needs this functionality, we have created a custom script that can export a grid to a CSV file. It will add a button to the grid toolbar, and simply requires the identifier of the grid model. Simply replace the "TpcGridModel" at the very bottom of the following code in the enableCsvExport invocation with the name of your own grid.
var enableCsvExport = function (gridId) {
var grid = tpc.find(gridId).get_grid();
var exportCsv = function (fileName) {
var originalPageSize = grid.dataSource.pageSize();
fileName = fileName || 'download.csv';
// Increase page size to cover all the data and get a reference to that data
var total = grid.dataSource.total();
if(total > 5000) total = 5000;
grid.dataSource.pageSize(total);
grid.dataSource.fetch(function() {
var csv = '';
var data = grid.dataSource.data();
//add the header row
for (var i = 0; i < grid.columns.length; i++) {
var field = grid.columns[i].field;
var title = grid.columns[i].title || field;
//NO DATA
if (!field) continue;
title = title.replace(/"/g, '""');
csv += '"' + title + '"';
if (i < grid.columns.length - 1) {
csv += ',';
}
}
csv += '\n';
//add each row of data
for (var row = 0; row < data.length; row++) {
for (var i = 0; i < grid.columns.length; i++) {
var fieldName = grid.columns[i].field;
var template = grid.columns[i].template;
var exportFormat = grid.columns[i].exportFormat;
//VALIDATE COLUMN
if (!fieldName) continue;
var value = '';
if (fieldName.indexOf('.') >= 0) {
var properties = fieldName.split('.');
var value = data[row] || '';
for (var j = 0; j < properties.length; j++) {
var prop = properties[j];
value = value[prop] || '';
}
}
else {
value = data[row][fieldName] || '';
}
if (value && template && exportFormat !== false) {
value = _.isFunction(template)
? template(data[row])
: kendo.template(template)(data[row]);
}
value = value.toString().replace(/"/g, '""');
csv += '"' + value + '"';
if (i < grid.columns.length - 1) {
csv += ',';
}
}
csv += '\n';
}
var blob = new Blob([csv]);
if (window.navigator.msSaveOrOpenBlob) // IE hack; see http://msdn.microsoft.com/en-us/library/ie/hh779016.aspx
window.navigator.msSaveBlob(blob, fileName);
else
{
var a = window.document.createElement("a");
a.href = window.URL.createObjectURL(blob, {type: "text/plain"});
a.download = fileName;
document.body.appendChild(a);
a.click(); // IE: "Access is denied"; see: https://connect.microsoft.com/IE/feedback/details/797361/ie-10-treats-blob-url-as-cross-origin-and-denies-access
document.body.removeChild(a);
}
}).always(function(){
grid.dataSource.pageSize(originalPageSize);
})
}
var exportToCsvButton = {
name: "tpcexportcsv",
text: "Export to CSV"
}
var options = grid.getOptions();
options.toolbar.push(exportToCsvButton);
grid.setOptions(options);
$(".k-grid-tpcexportcsv", grid.element).click(function(){
exportCsv("export.csv");
});
};
$(document).on("tpc:ready", function(){
enableCsvExport("TpcGridModel")
});
Last modified on 25 Oct 2019 14:10 by Josh