2009-08-18 1 views
10

Я создаю jqgrid с выпадающими колонками, и я использую редактирование ячеек. Мне нужны варианты выпадающего столбцов динамически изменять, и я попытался реализации этого, установив столбец быть:jqGrid динамический выбор опции

{ name: "AccountLookup", index: "AccountLookup", width: 90, editable: true, resizable: true, edittype: "select", formatter: "select" }, 

, а затем в случае beforeCellEdit у меня есть:

beforeEditCell: function(id, name, val, iRow, iCol) { 
     if(name=='AccountLookup') {    
      var listdata = GetLookupValues(id, name); 
      if (listdata == null) listdata = "1:1";        
      jQuery("#grid").setColProp(name, { editoptions: { value: listdata.toString()} })         
     } 
    }, 

GetLookupValues просто возвращает строку в формате «1: Один, 2: Два» и т. д. Это работает отлично, но параметры заселены на один щелчок позади - т.е. я нажимаю на AccountID в строке 1, а раскрывающийся список пуст, однако, когда я тогда нажмите «AccountID» в строке 3, параметры, которые я установил в строке 1, отображаются в строке 3 щелчка. И так далее. Поэтому всегда один клик позади.

Есть ли другой способ добиться того, что мне нужно? В целом, параметры выпадающего меню всегда меняются, и мне нужно загрузить их, когда пользователь вводит ячейку для редактирования. Возможно, я смогу каким-то образом получить элемент управления select в событии beforeEditCell и вручную ввести его значения вместо использования вызова setColProp? Если бы я мог получить пример этого, пожалуйста?

Другое дело - если раскрывающийся список пуст и пользователь не отменяет редактирование ячейки, сценарий сетки выдает ошибку. Я использую clientarray, если это имеет значение.

+0

Еще одна вещь - опция getChangedCells в столбце select всегда возвращает текст, а не значение/Id - есть ли способ обойти это? – 2009-08-18 06:22:22

ответ

4

Вы можете использовать опцию dataInit, как это:

{ name: "AccountLookup", index: "AccountLookup", width: 90, 
    editable: true, resizable: true, edittype: "select", formatter: "select", 
    editoptions: { dataInit: function(elem) 
    { 
     $(elem).empty() 
      .append("<option value='1'>Apples</option>") 
      .append("<option value='2'>Oranges</option>"); 
    } } } 

Просто замените статические яблоки & Апельсины варианты с GetLookupValues ​​функции().

 Смежные вопросы

  • Нет связанных вопросов^_^