Я использую jqgrid в моем новом проекте.
В конкретном случае мне нужно использовать элемент выбора в сетке. Нет проблем.
Я определяю colModel и столбец, например, как (из вики)
colModel : [
...
{name:'myname', edittype:'select', editoptions:{value:{1:'One',2:'Two'}} },
...
]
Но теперь, когда я загружаю свои данные, я бы предпочел, чтобы столбец "myname" содержал значение 1.
Это не будет работать для меня, вместо этого оно должно содержать значение "One".
Проблема в том, что текстовая часть элемента select в моем случае локализована на бизнес-уровне, где динамически генерируется colModel. Также тип данных для объекта, который генерирует данные через EF 4, может не быть строкой. Затем я должен найти правильный локализованный текст и манипулировать результатом данных, чтобы столбец «myname» не содержал целое число, как правило, но вместо строки с локализованным текстом.
Нет никакой опции, которую вы можете использовать, чтобы, когда данные содержат значение, которое соответствует опции в списке выбора, сетка находит эту опцию и представляет текст.
Теперь сетка представляет значение в виде текста, и сначала, когда я нажимаю кнопку «Изменить», она находит соответствующий параметр и представляет текст. Когда я отменяю редактирование, он возвращается, чтобы снова представить значение.
Я начал думать о решении, и это то, что я придумал. Пожалуйста, если вы знаете лучшее решение или если вы знаете, что есть встроенная опция, не стесняйтесь ответить.
Иначе вот что я сделал:
loadComplete: function (data) {
var colModel = grid.getGridParam('colModel');
$.each(colModel, function (index, col) {
if (col.edittype === 'select') {
$.each(grid.getDataIDs(), function (index, id) {
var row = grid.getRowData(id);
var value = row[col.name];
var editoptions = col.editoptions.value;
var startText = editoptions.indexOf(value + ':') + (value + ':').length;
var endText = editoptions.indexOf(';', startText);
if (endText === -1) { endText = editoptions.length; }
var text = editoptions.substring(startText, endText);
row[col.name] = text;
grid.setRowData(id, row);
});
}
});
}
Это работает, и я оставлю это так, если никто не придумает лучшего способа.