Я использую 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);
});
}
});
}
Это работает, и я оставлю это так, если никто не найдет лучшего способа.