我使用的jqGrid和代碼如下dataUrl(editoptions用於選擇)是不工作/將數據填充到DROPDOWNLIST中的jqGrid
$("#jqGridDel").jqGrid({
url: "Data.aspx/BindInfo",
datatype: 'json',
mtype: 'POST',
serializeGridData: function (postData) {
return JSON.stringify(postData);
},
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
ajaxSelectOptions: { type: 'POST',
contentType: 'application/json; charset=utf-8',
success: function (result) {
alert("hello");
}
},,
colName: ['DelId', 'Name', 'DeliveryName', 'Status'],
colModel: [
{
label: 'Del No',
name: 'DelId',
width: 35
},
{
label: 'Gate',
name: 'Name',
width: 200,
editable: true,
edittype: "select",
foramtter: "Select",
editoptions: {
dataUrl: "Data.aspx/BindDDInfo",
buildSelect: function (data)
{
alert(data);
}
}
},
{
label: 'Delivery',
name: 'DeliveryName',
width: 150,
editable: true
},
{
label: 'Active',
name: 'Status',
width: 40,
editable: true,
align: "center",
formatter: "checkbox",
edittype: "checkbox",
editoptions: { value: '1:0' }
}
],
loadonce: true,
width: 1050,
height: "100%",
pager: "#jqGridDelPager",
caption: "Configuration",
rowNum: 15,
jsonReader: {
page: function (obj) { return 1; },
total: function (obj) { return 1; },
records: function (obj) { return obj.d.length; },
root: function (obj) { return obj.d; },
repeatitems: false,
id: "QGDelId"
},
onSelectRow: function (id) {
if (id && id !== lastSelQGDel) {
lastSelQGDel = id;
}
},
ajaxRowOptions: { contentType: 'application/json; charset=utf-8' },
serializeRowData: function (postData) {
return JSON.stringify({ editQGData: postData });
},
editurl: "Data.aspx/SaveData"
});
$('#jqGridDel').navGrid("#jqGridDelPager", { edit: false, add: false, del: false, refresh: false, search: false, view: false });
$('#jqGridDel').inlineNav('#jqGridDelPager',
// the buttons to appear on the toolbar of the grid
{
edit: true,
add: true,
del: true,
refresh: true,
cancel: true,
editParams: {
keys: true,
rowid: lastSelQGDel,
restoreAfterError: true,
reloadAfterSubmit: true,
successfunc: function (result) {
if (result.responseJSON.d == "Success")
alert("Data saved successfully!!");
else
alert("There is some error in data processing");
setTimeout(function() {
$("#jqGridDel").jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
}, 50);
}
},
addParams: {
keys: true,
addRowParams: {
successfunc: function (result) {
if (result.responseJSON.d == "Success")
alert("Data saved successfully!!");
else
alert("There is some error in data processing");
setTimeout(function() {
$("#jqGridDel").jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
}, 50);
}
}
}
使用以下參考文件..
<script src=」Scripts/jquery-1.11.0.min.js」 type=」text/javascript」></script>
<script src=」Scripts/grid.locale-en.js」 type=」text/javascript」></script>
<script src=」Scripts/jquery.jqGrid.min.js」 type=」text/javascript」></script>
<script src=」Scripts/jquery-ui.min.js」 type=」text/javascript」></script>
I」能夠加載數據並將其從JQGRID保存到SQL數據庫,反之亦然。 但是,選擇選項(列:門)沒有加載任何數據..我試圖調試代碼,並瞭解dataUrl在編輯行時通過inline-nav不會觸發。
函數BindDDInfo(返回類型爲'string'並提到了Webmethod和static)後面的代碼返回<Select>
<Option>……</Option>
</Select>
格式的字符串。
<select>
<option value='1'>Text1</option>
<option value='2'>Test2</option>
<option value='3'>Test3</option>
<option value='4'>TEst5</option>
<option value='5'>TEst6</option>
<option value='6'>Test7</option>
<option value='7'>Test8</option>
<option value='8'>Test9</option>
</select>
通過F12(在IE9),檢查可以看到響應頭如下
Response HTTP/1.1 200 OK
Server ASP.NET Development Server/10.0.0.0
Date Wed, 24 Feb 2016 15:07:16 GMT
X-AspNet-Version 4.0.30319
Cache-Control no-cache, no-store
Pragma no-cache
Expires -1
Content-Type text/html; charset=utf-8
Content-Length 69186
Connection Close
響應主體返回data.aspx HTML頁面和不知道哪裏出了問題。
然後,我已經添加了HTTP處理程序在web.config文件
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
現在,dataUrl是打的WebMethod BindDdInfo和警報(「你好」),彈出(這是從ajaxSelectOptions),但它不是將在build選項中進行編輯選項。
的下面返回爲responsebody { 「d」: 「\ u003cselect \ u003e \ u003coption值= \ u00271 \ u0027 \ u003eTest1 \ u003c /選項\ u003e \ u003c /選擇\ u003e」}
的建議後,得到BindDDInfo JSON數據,我如下修改後的代碼,
我已經改變了我的webmethod返回List<Dictionary<string, object>>
和下面的代碼
ajaxSelectOptions: { type: ‘POST’,
contentType: ‘application/json; charset=utf-8’,
datatype: ‘json’,
success: function (result) {
alert(JSON.stringify(result));
}
}
警報正顯示出如下
{「d」:[{「ID」:1,」Name」:」Test1″},{「ID」:2,」Name」:」Test2″}]}
但是,buildSelect沒有擊中,
dataUrl: 「Data.aspx/BindDDInfo」,
buildSelect: function (response) {
var data = typeof response === 「string」 ? JSON.stringify(response) : response,
s = 「<select>」;
s += ‘<option value=」0″>–Select–</option>’;
$.each(data, function() {
s += ‘<option value=」‘ + this.ID + ‘」>’ + this.Name + ‘</option>’;
});
return s + 「</select>」;
}
試圖buildSelect的執行console.log(響應)和警報(反應),但它並沒有給任何彈出。
任何人都可以幫助我將數據從數據庫中獲取到JQGRID的下拉列表中。
奧列格您好,感謝您的快速回復。我已更新爲格式化程序:「select」和ajaxSelectOptions:{type:'POST'},但仍然沒有在編輯期間填充下拉菜單中的數據。我已經將調試點放在代碼隱藏的BindDDInfo中,並且它不會從dataUrl中觸發,但當我在url中提到相同的BindDDInfo時(將數據選擇到jqgrid),調試點就會被觸發。 – NM1988
@ NM1988:需要*調試代碼。你能否提供使用非最小化的免費jqGrid文件'jquery.jqgrid.src.js'的演示文稿,它能夠重現問題?你可以在[行](https://github.com/free-jqgrid/jqGrid/blob/v4.13.0/js/grid.common.js#L437)和[行](https: //github.com/free-jqgrid/jqGrid/blob/v4.13.0/js/grid.common.js#L454)來查看問題的原因。 – Oleg
奧列格,當然..會盡快分享。 – NM1988