jqgrid edittype выберите значение загрузки из данных

Я использую 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);
                            });
                        }
                    });
                }

Это работает, и я оставлю это так, если никто не найдет лучшего способа.

5
задан Hardik Mishra 17 January 2013 в 05:12
поделиться