Ответ 1
Я думаю, что вы ищете
var displayedData = $("#YourGrid").data().kendoGrid.dataSource.view()
Затем подстройте его следующим образом:
var displayedDataAsJSON = JSON.stringify(displayedData);
Надеюсь, это поможет!
У меня есть kendoGrid
, и я хотел бы получить JSON
из него после фильтрации и сортировки, как это сделать?
что-то вроде следующего,
var grid = $("#grid").data("kendoGrid");
alert(grid.dataSource.data.json); // I could dig through grid.dataSource.data and I see a function ( .json doen't exist I put it there so you know what i want to achieve )
Спасибо, спасибо за помощь!
Я думаю, что вы ищете
var displayedData = $("#YourGrid").data().kendoGrid.dataSource.view()
Затем подстройте его следующим образом:
var displayedDataAsJSON = JSON.stringify(displayedData);
Надеюсь, это поможет!
Если вы хотите получить все страницы отфильтрованных данных, вы можете использовать это:
var dataSource = $("#grid").data("kendoGrid").dataSource;
var filters = dataSource.filter();
var allData = dataSource.data();
var query = new kendo.data.Query(allData);
var data = query.filter(filters).data;
Обязательно проверьте, существуют ли фильтры, прежде чем пытаться применить их, или Kendo будет жаловаться.
Получить счетчик всех строк в сетке
$('#YourGridName').data("kendoGrid").dataSource.total()
Чтобы получить конкретные элементы строки
$('#YourGridName').data("kendoGrid").dataSource.data()[1]
Чтобы получить все строки в сетке
$('#YourGridName').data("kendoGrid").dataSource.data()
Json для всех строк в сетке
JSON.stringify($('#YourGridName').data("kendoGrid").dataSource.data())
Что-то вроде этого, чтобы отображать только данные, которые просматриваются в данный момент. Также расширена сетка, чтобы обеспечить эти функции по всему приложению.
/**
* Extends kendo grid to return current displayed data
* on a 2-dimensional array
*/
var KendoGrid = window.kendo.ui.Grid;
KendoGrid.fn.getDisplayedData = function(){
var items = this.items();
var displayedData = new Array();
$.each(items,function(key, value) {
var dataItem = new Array();
$(value).find('td').each (function() {
var td = $(this);
if(!td.is(':visible')){
//element isn't visible, don't show
return;//continues to next element, that is next td
}
if(td.children().length == 0){
//if no children get text
dataItem.push(td.text());
} else{
//if children, find leaf child, where its text is the td content
var leafElement = innerMost($(this));
dataItem.push(leafElement.text());
}
});
displayedData.push(dataItem);
});
return displayedData;
};
KendoGrid.fn.getDisplayedColumns = function(){
var grid = this.element;
var displayedColumns = new Array();
$(grid).find('th').each(function(){
var th = $(this);
if(!th.is(':visible')){
//element isn't visible, don't show
return;//continues to next element, that is next th
}
//column is either k-link or plain text like <th>Column</th>
//so we extract text using this if:
var kLink = th.find(".k-link")[0];
if(kLink){
displayedColumns.push(kLink.text);
} else{
displayedColumns.push(th.text());
}
});
return displayedColumns;
};
/**
* Finds the leaf node of an HTML structure
*/
function innerMost( root ) {
var $children = $( root ).children();
while ( true ) {
var $temp = $children.children();
if($temp.length > 0) $children = $temp;
else return $children;
}
}
Для части JSON есть вспомогательная функция для извлечения данных в формате JSON, которые могут помочь:
var displayedData = $("#YourGrid").data().kendoGrid.dataSource.view().toJSON()
ИЗМЕНИТЬ: после некоторых ошибок с указанным выше методом из-за поведения сетки kendo я нашел эту статью, которая решает проблему: Kendo DataSource не всегда возвращает наблюдаемый файл