Вопрос по jquery, javascript, html, json – Как получить отображаемые данные KendoGrid в формате json?

27

у меня есть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 )

Спасибо любая помощь с благодарностью!

Скрипка может помочь, но поможет ли это вам?console.log( $("#grid").data("kendoGrid").dataSource.options.data ); Marc

Ваш Ответ

5   ответов
1

рмате JSON, которая может помочь:

var displayedData = $("#YourGrid").data().kendoGrid.dataSource.view().toJSON()

РЕДАКТИРОВАТЬ: после некоторых ошибок с вышеуказанным методом из-за поведения сетки кендо, я нашел эту статью, которая решает проблему: Представление Kendo DataSource не всегда возвращает observablearray

19

вы можете использовать это:

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 будет жаловаться.

Любое обновление более эффективного способа получить эти данные? При работе с большими наборами данных (+ 5 КБ) при выполнении подобного запроса наблюдается заметная задержка. Я думаю, что, поскольку представление уже рассчитано для текущей страницы, оно должно быть легко доступно для всех страниц.
Хорошо, это просто сработало для меня. Я просто извлекал источник данных и удивлялся, почему, когда я просматривал свою запись в сетке, она показала только 1 запись, но когда я просмотрел ту же запись из моего источника данных, она показала 5. Это заставило ее работать! Спасибо, сэр!
Рад, что это помогло.
10

$('#YourGridName').data("kendoGrid").dataSource.total()

Чтобы получить определенные элементы строки

$('#YourGridName').data("kendoGrid").dataSource.data()[1]

Чтобы получить все строки в сетке

$('#YourGridName').data("kendoGrid").dataSource.data()

Json для всех строк в сетке

JSON.stringify($('#YourGridName').data("kendoGrid").dataSource.data())
Мне нравится, полностью. Будет ссылаться на это.
2

для отображения только тех данных, которые просматриваются в данный момент. Также расширена сетка, чтобы обеспечить эти функции во всем приложении.

 /**
 * 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;
    }
}
Это круто. Должен быть проголосовал выше.
51

var displayedData = $("#YourGrid").data().kendoGrid.dataSource.view()

Затем зачеркните это следующим образом:

var displayedDataAsJSON = JSON.stringify(displayedData);

Надеюсь это поможет!

идеально!!! Спасибо!!! :) В моем приложении после просмотра API-интерфейса, просматривая ваш пример, я использовал $ (& quot; # YourGrid & quot;). data (). kendoGrid.dataSource.data () и $ (& quot; # YourGrid & quot;). data (). kendoGrid.dataSource.at (index) :)
Привет, я не могу получить отображаемые данные сетки кендо. В моем случае у меня есть три уровня сетки. На втором и третьем уровне источника данных сетки, если я назначаю данные с помощью .toJSON (), источник данных сетки не обновляется. Если я не использую .toJSON (), то во время отмены я не могу отменить изменения. Можете ли вы сказать мне решение
Вы не можете, вы можете просто получить количество всех записей с помощью $ (& apos; # YourGrid & apos;). Data (). KendoGrid.dataSource.total (), когда существует подкачка, при которой записи извлекаются только для этой конкретной страницы.
Как получить источник данных (все страницы) с примененными текущими фильтрами?
Спасибо, это сработало ...

Похожие вопросы