Ошибка в заполнении выпадающего списка при нажатии на строку в 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 для заполнения, потому что функция оповещения вообще не запускается