Ошибка в заполнении выпадающего списка при нажатии на строку в jqGrid

Я хочу заполнить выпадающий список ячеек jqGrid при нажатии на строку. Я нажимаю на строку, но раскрывающийся список не заполняется.

Код, который я написал для заполнения выпадающего списка при редактировании или нажатии на строку:

colModel: [
            { name: 'Emp_code', width: 50, sortable: false, align: "center" },
            { name: 'Emp_name', width: 200, sortable: false },
        //{ name: 'totalhours', width: 100, sortable: false, align: 'center', editable: true, edittype: "select", editoptions: { value: "1:1;2:2;3:3;4:4;5:5;6:6;7:7;8:8;9:9"} }
            {name: 'totalhours', index: 'totalhours', width: 100, sortable: false, align: 'center', editable: true, edittype: "select",
            editoptions:
            {
                dataInit: function(elem) {

                    $(elem).empty()
                    .append($('<option></option>').val("1").html("Apples"))
                    .append($('<option></option>').val("2").html("Oranges"));

                }
            }
        }
        ],

Я хочу заполнить столбец totalhours при щелчке строки, который будет заполнен яблоками и апельсинами, но каким-то образом я получаю пустые выпадающие списки. При щелчке строки отображается раскрывающийся список, но он не заполняется.

2 ответа

Если вам нужно получить опцию выбора с сервера, вы должны использовать editoptions dataUrl и опционально buildSelect, Если сервер возвращает JSON вместо HTML-фрагмента, как

<select><option value="1">Apples</option><option value="2">Oranges</option></select>

можно использовать buildSelect преобразовать ответ сервера в формат. Если srever возвращает строку в формате JSON, ваша реализация buildSelect Обработчик события может преобразовать строку JSON в объект и затем создать строку <select>...</select> от объекта.

Вы можете найти соответствующий пример кода, например, здесь.

В соответствии с твоим предложением я сделал это..

 colModel: [
            { name: 'Emp_code', width: 50, sortable: false, align: "center" },
            { name: 'Emp_name', width: 200, sortable: false },
        //{ name: 'totalhours', width: 100, sortable: false, align: 'center', editable: true, edittype: "select", editoptions: { value: "1:1;2:2;3:3;4:4;5:5;6:6;7:7;8:8;9:9"} }

           {name: 'totalhours', width: 100, sortable: false, align: 'center', editable: true, edittype: "select",
           editoptions: { dataUrl: '../Services/ServiceTest.asmx/GetListHours',
               buildSelect: function(data) {
                   alert('hello i am here ');
                   var response = jQuery.parseJSON(data.responseText);
                   var s = '<select>';
                   if (response && response.length) {
                       for (var i = 0, l = response.length; i < l; i++) {
                           var ri = response[i];
                           s += '<option value="' + ri + '">' + ri + '</option>';
                       }
                   }
                   return s + "</select>";
               }

           }
       }
        ],

и соответствующая веб-версия i, к которой я призываю:

public String GetListHours() 
    {
        List<int> list = new List<int> { };            
        for (int i = 0; i < 10; i++)
        {
            list.Add(i);
        }
        return JsonConvert.SerializeObject(list);
    }

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

Другие вопросы по тегам