我搜索了许多论坛和帖子,但仍然无法获得 edittype: select with the editoptions: dataurl to work。
填充网格后,数据加载就很好了。当我单击编辑按钮时,下拉列表具有正确的值和名称。当我单击保存时,我收到一条错误消息,指出缺少其中一个参数。它似乎没有拉取所选选项的值。
我已经尝试了 formatter: 'select' 选项,但是当我使用该选项时,加载网格时这些列中没有显示任何内容。
这是我的代码。
var buildSelectFromJson = function (data) {
var html = '<select>', d = data.d, length = d.length, i = 0, item;
for (; i < length; i++) {
item = d[i];
html += '<option value=' + item.id + '>' + item.value + '</option>';
}
html += '</select>';
return html;
};
$.extend($.jgrid.edit, {
ajaxEditOptions: { contentType: "application/json" },
recreateForm: true,
serializeEditData: function (postData) {
return JSON.stringify(postData);
}
});
jQuery("#usage").jqGrid({
url: '/vochaptracker/Services/vochapService.asmx/GetUsage',
datatype: 'json',
mtype: 'post',
loadonce: true,
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
serializeGridData: function (postData) {
return JSON.stringify(postData);
},
jsonReader: {
root: function (obj) { return obj.d.rows; },
page: function (obj) { return obj.d.page; },
total: function (obj) { return obj.d.total; },
records: function (obj) { return obj.d.records; }
},
colNames: ['Date', 'Paint', 'Booth', 'Gallons Used'],
colModel: [
{ name: 'date', index: 'date', width: 75, editable: true },
{ name: 'paint', index: 'paint', width: 300, editable: true, edittype: 'select', formatter:'select', editoptions: { dataUrl: "/vochaptracker/Services/vochapService.asmx/GetPaintsForEdit",
buildSelect: buildSelectFromJson}
},
{ name: 'booth', index: 'booth', width: 100, editable: true, edittype: 'select', formatter:'select', editoptions: { dataUrl: "/vochaptracker/Services/vochapService.asmx/GetBoothsForEdit",
buildSelect: buildSelectFromJson}},
{ name: 'gallonsUsed', index: 'gallonsUsed', width: 100, editable: true }
],
rowNum: 20,
rowList: [20, 30, 40],
pager: '#pager4',
sortname: 'ID',
viewrecords: true,
sortorder: "desc",
caption: "Daily Usage",
height: '400',
editurl: '/vochaptracker/Services/vochapService.asmx/EditUsage',
ajaxSelectOptions: { contentType: "application/json", dataType: 'json', type: "POST" }
});
jQuery("#usage").jqGrid('navGrid', "#pager4", { edit: false, add: false, del: true });
jQuery("#usage").jqGrid('inlineNav', "#pager4");
网络服务:
public class jqGridPaintHelper
{
public string total;
public string page;
public string records;
public List<TableRow> rows;
}
public class TableRow
{
public string id;
public List<string> cell;
}
public class editHelper
{
public string id;
public string value;
}
[WebMethod]
[ScriptMethod( ResponseFormat = ResponseFormat.Json )]
public jqGridPaintHelper GetUsage( int page, int rows, string sidx, string sord )
{
vochapdbDataContext db = new vochapdbDataContext();
jqGridPaintHelper helper = new jqGridPaintHelper();
int dbCount = db.DailyUsages.Count();
helper.total = ( ( dbCount + rows - 1 ) / rows ).ToString();
helper.page = page.ToString();
helper.records = dbCount.ToString();
List<TableRow> usage = new List<TableRow>( dbCount );
foreach ( DailyUsage row in db.DailyUsages )
{
usage.Add( new TableRow()
{
id = row.ID.ToString(),
cell = new List<string> {
row.date.ToShortDateString(),
row.Paint.paintName.ToString(),
row.Booth.tag.ToString(),
row.gallonsUsed.ToString()
}
} );
}
helper.rows = usage;
return helper;
}
[WebMethod]
[ScriptMethod( ResponseFormat = ResponseFormat.Json )]
public int EditUsage( string ID, string date, string paintID, string boothID, string gallonsUsed, string oper, string id )
{
vochapdbDataContext db = new vochapdbDataContext();
if ( oper == "edit" )
{
db.updateUsage( int.Parse( ID ), DateTime.Parse( date ), paintID, int.Parse( boothID ), decimal.Parse( gallonsUsed ) );
}
else if ( oper == "add" )
{
DailyUsage newUsage = new DailyUsage();
newUsage.date = DateTime.Parse( date );
newUsage.paintID = paintID;
newUsage.boothID = int.Parse( paintID );
newUsage.gallonsUsed = decimal.Parse( gallonsUsed );
db.DailyUsages.InsertOnSubmit( newUsage );
db.SubmitChanges();
}
else if ( oper == "del" )
{
db.deleteUsage( int.Parse( id ) );
}
return 1;
}
[WebMethod]
[ScriptMethod( ResponseFormat = ResponseFormat.Json )]
public List<editHelper> GetPaintsForEdit()
{
vochapdbDataContext db = new vochapdbDataContext();
List<editHelper> paints = new List<editHelper>();
foreach ( Paint row in db.Paints )
{
paints.Add( new editHelper() { id = row.ID, value = row.paintName } );
}
return paints;
}
[WebMethod]
[ScriptMethod( ResponseFormat = ResponseFormat.Json )]
public List<editHelper> GetBoothsForEdit()
{
vochapdbDataContext db = new vochapdbDataContext();
List<editHelper> booths = new List<editHelper>();
foreach ( Booth row in db.Booths )
{
booths.Add( new editHelper() { id = row.ID.ToString(), value = row.tag } );
}
return booths;
}
这是我在编辑后尝试保存一行时遇到的错误:
System.InvalidOperationException: Missing parameter: paintID.
at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
任何帮助是极大的赞赏。我已经被困了大约一个月了。