jqgrid edittype выбирает значение загрузки из данных - PullRequest
5 голосов
/ 03 апреля 2011

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

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

1 Ответ

6 голосов
/ 03 апреля 2011

Вы должны просто включить дополнительную опцию formatter:'select' в определении столбца.Подробнее см. в документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...