JQGrid Динамические данные выбора

Я использовал пример кода в примере кода по этой ссылке

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

например, данные о моем выборе могут быть "0:Hello;1:World"; Выпадающее окно редактирования / добавления показывает Hello и World и имеет правильные индексы для них. Если ячейка имеет значение 1, я ожидаю, что она покажет World в самой сетке, но вместо этого она показывает 1.

Вот сама строка из моей сетки:

{ name: 'picklist', index: 'picklist', width: 80, sortable: true, editable: true,
  edittype: "select", formatter: "select", editrules: { required: true} },

Я заполняю динамическое содержимое данных в событии loadComplete следующим образом:

$('#mygrid').setColProp('picklist', { editoptions: { value: picklistdata} });

Данные списка выбора представляют собой строку из пар значений типа "0: Привет; 1: Мир".

Пожалуйста, кто-нибудь может предложить любую помощь. Я довольно новичок в JQGrids, поэтому не могли бы вы также привести примеры.

2 ответа

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

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

$.extend($.fn.fmatter, {
    selectuser: function(cellvalue, options, rowdata) {
        var userdata;
        $.ajax({
            url:'dropdowns/json/user',
            async:false,
            dataType:'json',
            cache:true,
            success: function(data) {
                userdata = data;
            }
        });
        return typeof cellvalue != 'undefined' ? userdata[cellvalue] : cellvalue ;
    }
});

Этот форматтер загружает отображение идентификатора и пользователя в этом случае и возвращает имя пользователя для определенного значения ячейки. Затем я установил formatter:'selectuser' вариант для столбца colModelи это работает.

Конечно, это делает один JSON-запрос на строку, отображаемую в сетке. Я решил эту проблему, установив 10 секунд кэширования заголовков моих ответов json, например:

private function set_caching($seconds_to_cache = 10) {
    $ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
    header("Expires: $ts");
    header("Pragma: cache");
    header("Cache-Control: max-age=$seconds_to_cache");
}

Я знаю, что это решение не идеально, но оно было адекватным для моего приложения. Хиты кэша обслуживаются браузером мгновенно, и сетка течет плавно. В конечном счете, я надеюсь, что встроенный select Форматер будет исправлен для работы с данными JSON.

Если вы сохраните в jqGrid идентификаторы select элементы и хотите показать соответствующие тексты, то вы должны использовать formatter:'select' в colModel (см. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:predefined_formatter) вместе с edittype: "select",

Использование stype: 'select' может быть также интересно для вас, если вы планируете поддерживать поиск данных.

Другие вопросы по тегам