1

多くのフォーラムや投稿を検索しましたが、まだedittypeを取得できません:editoptions:dataurlで選択して機能させます。

グリッドにデータが入力されると、データの読み込みは正常に読み込まれます。編集ボタンをクリックすると、ドロップダウンリストに正しい値と名前が表示されます。[保存]をクリックすると、パラメーターの1つが欠落しているというエラーが表示されます。選択したオプションの値を取得しているようには見えません。

フォーマッターを試しました:'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()

どんな助けでも大歓迎です。私は今約1ヶ月間立ち往生しています。

4

1 に答える 1

1

私はついにそれを理解しました。ドロップダウン選択リストに奇妙な値がありました。

値の周りに「」を追加すると、問題が修正されました。

年:

html += '<option value=' + item.id + '>' + item.value + '</option>';

新しい:

html += '<option value="' + item.id + '">' + item.value + '</option>';
于 2012-12-10T18:15:18.330 に答える