editData如何工作?

时间:2013-02-12 14:05:31

标签: php jqgrid

JqGrid文档说明了关于postData的以下内容:

  

用于向发布到服务器的数据添加内容的数组

就是这样。所以,我使用postData将变量发送到我的PHP,以便我可以使用switch case来调用我想要的函数。

这允许我有一个包含项目所有功能的PHP页面。我想用editData做同样的事情所以我不需要为与项目相关的每个内联编辑功能都有一个PHP页面。

但是,editData似乎没有传递给PHP页面。我尝试将POSTed变量打印到文件中,它们是空的。建议?

注意:我知道editData错误,但这应该由我正在使用的版本4.4.4修复

$("#list").jqGrid({
    url:'functions.php',
    datatype:'xml',
    mtype:'POST',           
    postData: { 
        action:'popGrid', 
        sqlCount:sqlCount, 
        sqlSelect:sqlSelect, 
        sqlSelect2:sqlSelect2, 
        label1:label1, 
        label2:label2,
    },
    colNames:['Label','Account_Num','Amount', 'Type Code', 'Record Code',    'Sequence'],
    colModel :[
        {name:'label', index:'label', width:150, align:'center', sortable:false, editable:true},
        {name:'cntrct_id', index:'cntrct_id', width:150, align:'center', sortable:true},
        {name:'amount', index:'amount', width:150, align:'center', sortable:false, editable:true},
        {name:'type_cd', index:'type_cd', width:150, align:'center', sortable:false, editable:true},
        {name:'rec_cd', index:'rec_cd', width:150, align:'center', sortable:false},
        {name:'db_seq', index:'db_seq', width:150, align:'center', sortable:false},
    ],
    editurl: 'functions.php',
    extraparam: { action: function(){ return 'grdAdjust'; } },
    onSelectRow: function(id) {
        if(id && id!==lastSel) {
            jQuery('#list').restoreRow(lastSel);
            jQuery('#list').editRow(id,true);
            lastSel=id;
        }
    },

    pager: '#pager',
    rowNum:100,
    rowList:[100,200,300,400,500,600,700,800,900,1000],
    sortname: 'cntrct_id',
    sortorder: 'desc',
    viewrecords: true,
    caption: 'Adjustments'
});

1 个答案:

答案 0 :(得分:1)

选项editData在{* 3}}中扮演与主网格中postData相同的角色。另一方面,您在问题的文本中写了“内联编辑”。如果您应该使用extraparam选项(请参阅form editing)。如果您需要内联编辑的常用选项,那么$.jgrid.inlineEdit中的使用权限defalut设置可能对您有所帮助。您没有发布任何代码,我不确定您使用哪种编辑模式以及使用哪种方式,因此我无法提供更多使用示例editDataextraparam等。

更新:您现在以错误的方式使用extraparamextraparam 不是 jqGrid选项,它是editRow的选项。正确使用可能是以下几点:

onSelectRow: function (id) {
    if (id && id !== lastSel){
        $(this).jqGrid("restoreRow", lastSel);
        $(this).jqGrid("editRow", id, {
            keys: true,
            extraparam: {
                action: function () {
                    return 'grdAdjust';
                }
            }
        });
        lastSel = id;
    }
}

如果您需要发布action的常量值,则可以使用extraparam的简化形式:例如extraparam: {action: 'grdAdjust'}。如果你需要从页面中返回一些变量或某个元素的值,那么函数的使用是非常有用的,这些元素将在editRow的不同调用之间进行更改。

此外,我建议您添加jqGrid的gridview: true选项,并简化您使用的colModel。如果indexname具有相同的值,则可以将其发出。 width的默认值已经是150,因此您也不需要指定width:150。如果您希望在所有列或最多列中使用align:'center',则可以通过在网格中包含align选项来更改网格的默认值cmTemplate: {align:'center'}。由于大多数列都有sortable: false,因此您也可以在cmTemplate中添加该设置。因此,您可以将colModel缩减为以下内容:

colModel: [
    {name: 'label', editable: true},
    {name: 'cntrct_id', sortable: true},
    {name: 'amount', editable: true},
    {name: 'type_cd', editable: true},
    {name: 'rec_cd'},
    {name: 'db_seq'},
],
cmTemplate: {align: 'center', sortable: false},

此类更改不仅简化了代码的读取,还简化了维护。请参阅the documentation有关列模板的更多信息。