JQGrid с динамических столбцов и функциональность на стороне сервера


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

Действие маршрут будет в JSON dataSource для jqgrid.

Ссылка

Мой подход:

  1. Сначала сделать AJAX-вызов, чтобы получить динамический столбец модель и другие параметры сетки (строк, страниц и т. д.) за исключением данных.
  2. Обновление сетки параметры (URL-адрес, тип данных и mtype) для включения на стороне сервера подкачки, сортировка и т. д.

Я использую флаг в строке запроса, чтобы определить, если мне нужна модель коллизии (или) сведения.

Примечание: Я поставил асинхронный флаг в false для ajax-запросов, чтобы убедиться, что я не столкнуться с проблемами времени.

Как вы можете видеть, мне нужно сделать два запроса, чтобы установить сетку. Один, чтобы получить модель coL и еще один для получения данных, и обновлять ее для включения серверного взаимодействия для последующих запросов. Это нормально?

$.ajax({
    url: firstFetchURL, //will hit an asp.net mvc action on a controller that returns json
    dataType: "json",
    type: 'POST',
    async: false,
    success: function (result) {

        if (result) {

            if (!result.Error) {

                var colD = result.data;
                var colM = result.colModelList;
                var colN = result.columnNames;

                $("#myGrid").jqGrid('GridUnload');



                $("#myGrid").jqGrid({ datatype: 'local',
                    colModel: colM,
                    colNames: colN,
                    data: colD,
                    height: "auto",
                    rowNum: 10,
                    sortname: viewOptionText,
                    sortorder: "desc",
                    pager: '#myGridPager',
                    caption: "Side-by-Side View",
                    viewrecords: true,
                    gridview: true
                });


                //Update grid params so that subsequent interactions with the grid for sorting,paging etc. will be server-side

                $("#myGrid").jqGrid('setGridParam', { url: secondFetchURL, datatype: 'json', mtype: 'POST' }).trigger('reloadGrid');


            }
        }
    },
    error: function (xhr, ajaxOptions, thrownError) {
        if (xhr && thrownError) {
            alert('Status: ' + xhr.status + ' Error: ' + thrownError);
        }
    },
    complete: function () {
        $("#loadingDiv").hide();
    }
});

Я видел похожие темы тут, но я ищу некоторые направления из опытных JQGrid пользователей.



Комментарии
1 ответ

Небольшие рекомендации:


  1. Мне кажется, что вы можете удалить асинхронные: ложные параметра $.Аякс вызов.

  2. Вы можете удалить результат.сведения из данных, возвращаемый AJAX-вызов. (После этого вы должны, а линия с Вар холодная = результат.данных). Данные будут не потому, что вы называете триггер('reloadGrid'); немедленно.

  3. С другой стороны, ценности для sortname и сортировки параметров должны быть включены в модель данных (как свойства результата).

  4. Вы можете использовать URL-адрес: secondFetchURL, тип данных: 'JSON с', mtype: 'пост' параметров непосредственно в jqGrid определение ( в $("#myGrid").jqGrid({/*здесь*/});. Никаких триггер('reloadGrid') будут необходимы.

Обновлено: посмотри на это и это ответы. Наверное, это то, что вам нужно от динамических столбцов.

Вы можете взглянуть на ответ в случае, если вам нужно, чтобы использовать пользовательские модули форматирования.

5
ответ дан 27 июля 2011 в 10:07 Источник Поделиться