jqgrid,使用add navigator按钮添加行时如何传递数据

时间:2011-12-17 22:22:12

标签: jqgrid

如果使用添加导航按钮添加行,如何传递其他POST键来添加控制器?

我尝试使用下面的代码来传递带有表单值的_dokdata,但是_dokdata没有传递给控制器 服务器

$("#grid").jqGrid('inlineNav', '#grid_toppager', {
   addParams: {
    useDefValues : true,
    useFormatter : false,
    addRowParams : {
        extraparam : { _dokdata : FormData },
       editData: { _dokdata: FormData },
       },
    editData: { _dokdata: FormData },
    extraparam : { _dokdata : FormData },
   },

   add: true,
   edit: false,
   save: true,
   cancel: true,
   editParams : {}
   }); 

function FormData() {
    return JSON.stringify($("#_form").serializeArray());
}

1 个答案:

答案 0 :(得分:4)

您所描述的问题似乎是代码中的小错误和jqGrid代码中的错误(请参阅以the place开头的行)。

您的代码中的问题是您没有像editParams那样正确设置addParams。正确的用法应该是:

$("#grid").jqGrid('inlineNav', '#grid_toppager', {
    addParams: {
        useDefValues: true,
        addRowParams: {
            keys: true,
            extraparam: { _dokdata: FormData }
        }
    },
    editParams: {
        extraparam: { _dokdata: FormData }
    },
    add: true,
    edit: false,
    save: true,
    cancel: true
}); 

function FormData() {
    return JSON.stringify($("#_form").serializeArray());
}

当前版本的jqGrid代码中的问题在我看来是jqGrid中使用的 保存按钮(请参阅here)仅使用editParams.extraparam的设置,而不是使用addParams.addRowParams.extraparam之类的设置。我在keys: true的{​​{1}}参数中添加了addParams.addRowParams选项。因此,如果用户按 Enter 保存更改,您将看到jqGrid的当前实现(v 4.3.0)将使用inlineNav并将使用addParams.addRowParams.extraparam如果通过导航按钮的“保存”按钮保存行。

更新:我测试了代码并在jqGrid v.4.3.0中发现了另外一个错误。我在the feature request中建议引入editParams.extraparam设置,可以像其他非常实用的设置$.jgrid.inlineEdit一样使用,但是在内联而非表单编辑的情况下。功能请求已实现 在jqGrid 4.3.0中,但实现包含一个bug。

要修复错误,我们应该从

替换行33117304
$.jgrid.edit

o = $.extend($.jgrid.inlineEdit, settings, args[0]);

如何从the demo看到,在修复错误后所有工作都正常。

更新2 :上述修复与the fix完全相同,但仍然不正确。要修复错误,必须在代码中进行更多更改。例如,可以从

更改行32-36o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]); 内部)
editRow

例如以下

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
    o = $.extend($.jgrid.inlineEdit, settings, args[0]);
} else {
    o = settings;
}

以同样的方式行116-120if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) { settings.keys = false; // keys is args[0] and it's an object o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]); } else { o = settings; } 内部)

saveRow

可以更改为

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
    o = $.extend($.jgrid.inlineEdit, settings, args[0]);
} else {
    o = settings;
}

和第304

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
    settings.successfunc = null; // successfunc is args[0] and it's an object
    o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]);
} else {
    o = settings;
}

可以更改为

o = $.extend($.jgrid.inlineEdit, settings, args[0]);

更新3 :我将my suggestion发布到trirand关于“删除”问题。请参阅使用修复程序here的相同演示。