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'
может быть также интересно для вас, если вы планируете поддерживать поиск данных.