jqGrid: форматировать значение ячейки без изменения фактического (базового) значения? - PullRequest
0 голосов
/ 20 декабря 2011

Возможно ли отобразить что-то другое, при этом сохраняя оригинальное значение ячейки для редактирования?

один из столбцов в моем jqGrid - это «перечисленные» данные. Для редактирования я предоставляю тип редактирования: select + editoptions: enum-key: label set, что приводит к правильному отображению select editor. Однако я хотел бы отобразить метку вместо enum-key для обычного просмотра, а не только для редактирования. Я знаю, что могу использовать пользовательские средства форматирования ячеек, но это приведет к тому, что фактическое значение 1016 * будет изменено , тогда мне придется еще раз искать пары ключ-метка перед редактированием строки .. .

1 Ответ

1 голос
/ 20 декабря 2011

Трудно сказать, не видя некоторый код, но вам не нужно использовать пользовательский форматер, просто используйте formatter: 'select', как показано в документации .В нем конкретно говорится, что «данные должны содержать ключи (« 1 »или« 2 »), но значение (« Один »или« Два ») будет отображаться в сетке».

Другой вариантесли вам нужно больше контроля над выводом, используйте опцию buildSelect editoptions.Например, вот выбор, который у меня есть в коде, есть и другие примеры.Идея, конечно, заключается в том, что вы можете вернуть любые данные, а затем манипулировать ими по мере необходимости для создания выбора.Затем функция изменения события данных гарантирует, что для поля ввода установлено правильное значение.

{ name: 'Id', index: 'Id', editable: true, hidden: true,  
     editoptions: { defaultValue: row_id,
                    dataUrl: "DataService.asmx/GetList",
                    buildSelect: function (data) {
                                 var s = '<select>';
                                 if (data && data.d) {
                                    //data is nested, so we need a few steps to get to the actual data
                                    var list = data.d;
                                    var opts = JSON.parse(list);
                                    var subList = opts.List;
                                    //loop through the data to build the options list
                                    for (var i = 0, l = subList.length; i < l; i++) 
                                        {   var ri = subList[i]; 
                                            s += '<option value=' + ri.Id + '>' + ri.Name + '</option>';
                                        }
                                  }
                                  else {
                                     s+= "<option value=0>No data to display</option>";
                                  }
                                  return s + "</select>"; 
                            } ,
                      dataEvents: [
                              { type: 'change',
                                fn: function (e) {
                                        $('input#Id').val(this.value);
                                }
                              }
                              ]

                     },
       editrules:  {edithidden: true},
       edittype: 'select' 

}

...