У меня есть jqGrid, где у меня есть несколько столбцов, а 1 из столбцов представляет собой выпадающий список (выбрать), заполненный из базы данных.
То, что я хочу, это: когда я не в столбце режима редактирования с выпадающими списками, просто нужно показать текст, который должен быть взят из запроса, а когда я в режиме редактирования, он должен показать раскрывающийся список.
точно так же, как здесь: http://www.trirand.com/blog/jqgrid/jqgrid.html перейти к редактированию строк / вводу tipyes
вот код моей сетки:
<script type="text/javascript">
var lastsel;
$(document).ready(function () {
$.getJSON('@Url.Action("ConstructSelect")', function (data) {
setupGrid(data);
});
});
function setupGrid(data) {
jQuery(document).ready(function () {
jQuery("#list").jqGrid({
url: '@Url.Action("GetStoreList")',
datatype: 'json',
mtype: 'GET',
colNames: ['Butiks kategori', 'Butik Navn', 'By', 'Sælger'],
colModel: [
{ name: 'Id', index: 'Id', width: 50 },
{ name: 'Butiks Kategori', index: 'StoreId', width: 200, edittype: 'text', align: 'center', editable: false },
{ name: 'Buttiks Navn', index: 'StoreName', width: 200, edittype: 'text', align: 'center', editable: false },
{ name: 'Country', index: 'Country', width: 80, sortable: true, editable: true, edittype: "select", editoptions: { value: data }}],
onSelectRow: function (id) {
if (id && id !== lastsel) {
jQuery('#list').jqGrid('restoreRow', lastsel);
jQuery('#list').jqGrid('editRow', id, true);
lastsel = id;
}
},
editurl: '@Url.Action("GridSave")',
rowNum: 50000,
rowList: [5, 10, 20, 50],
pager: '#page',
sortname: 'Id',
sortorder: "desc",
viewrecords: true,
height: "500px",
imgpath: '/scripts/themes/base/images'
});
jQuery("#list").jqGrid('navGrid', "#page", { edit: false, add: false, del: false });
});
}
</script>
P.S. Я буду ссылаться на код, как только я вернусь домой
ОБНОВЛЕНО : Спасибо за ответ, я новичок в jq, поэтому я делаю много ошибок c., Но теперь я вернулся туда, где был раньше, выпадающий список не заполнен данными. Я убрал код, как ты сказал, так что теперь это выглядит так:
кстати. ConstructSelect возвращает список строк
jQuery(document).ready(function () {
jQuery("#list").jqGrid({
url: '@Url.Action("GetStoreList")',
ajaxSelectOptions: { type: "POST", dataType: "json" },
datatype: 'json',
mtype: 'GET',
colNames: ['Butiks kategori', 'Butik Navn', 'By', 'Sælger'],
colModel: [
{ name: 'Kategori', index: 'Kategori', width: 50, key: false},
{ name: 'Navn', index: 'Navn', align: 'center', editable: false },
{ name: 'By', index: 'By', align: 'center', editable: false },
{ name: 'Sælger', index: 'Sælger', editable: true, edittype: "select",
editoptions: { dataUrl: '@Url.Action("ConstructSelect")',
buildSelect: function (data) {
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>";
}
}
}],
onSelectRow: function (id) {
if (id && id !== lastsel) {
jQuery('#list').jqGrid('restoreRow', lastsel);
jQuery('#list').jqGrid('editRow', id, true);
lastsel = id;
}
},
editurl: '@Url.Action("GridSave")',
rowNum: 50000,
rowList: [5, 10, 20, 50],
pager: '#page',
sortname: 'Id',
sortorder: "desc",
viewrecords: true,
height: "900px"
});
jQuery("#list").jqGrid('navGrid', "#page", {edit:false, add:false, del:false});
});
Хорошо, для его работы потребовались небольшие изменения:
var response = typeof(data) === "string" ? jQuery.parseJSON(data.responseText):data;
очевидно, вы должны указать buildselect, что данные, которые вы хотите изменить, это String
Но у меня все еще есть проблема, из-за которой он не показывает, какие продавцы уже выбраны!
Хорошо, после перезапуска это мистическим образом сработало ... теперь оно решено