【问题标题】:inlineNav Edit button not working with multiselect jqGridinlineNav 编辑按钮不适用于多选 jqGrid
【发布时间】:2012-10-27 06:17:47
【问题描述】:

我有带有inlineNav 的多选内联可编辑jqGrid。以下步骤是创建问题:

  1. 点击添加按钮,空记录显示在网格中。添加数据并保存。
  2. 使用复选框选择该记录。
  3. 每1步在网格中添加一条记录,但点击取消按钮而不是保存它。
  4. 最近的记录消失了,点击编辑按钮,因为我已经选择了一条记录。
  5. 所选记录未进入编辑模式,它给出警告消息“选择行”。
  6. 如果我取消选择并再次选择并单击编辑按钮,它将出现在编辑模式中。

你能告诉我任何解决办法吗?

var i = 1;
var lastSelection = 0;
$(function () {
    $("#curruntppeGridgrid").jqGrid({
        url: 'getcostperformancecurreuntPPE',
        datatype: "json",
        jsonReader: { "repeatitems": false, unformat: Unformat_Select },
        colNames: ['Category', 'Manufacturer', 'Style', 'UOM', 'Count', 'Unit', 'Qty', 'Cost', 'Sizes', 'Annual Cost', 'VP2'],
        colModel: [
            {
                name: 'category', index: 'category', align: 'center', editable: true, hidden: false, edittype: 'select',
                editoptions: {
                    multiple: false, value: catList,
                    dataEvents: [{
                        type: 'change',
                        fn: function (e) {
                            loadStyle(e);
                        }
                    }]
                },
                editrules: { required: false, custom: true, custom_func: categorycheck }
            },
            {
                name: 'manufacturer', index: 'manufacturer', align: 'center', editable: true, hidden: false, edittype: 'select',
                editoptions: {
                    value: manufList,
                    dataEvents: [{
                        type: 'change',
                        fn: function (e) {
                            loadStyle(e);
                        }
                    }]
                },
                editrules: { required: false }
            },
            {
                name: 'style', index: 'style', align: 'center', editable: true, hidden: false, edittype: 'select',
                editoptions: {
                    multiple: false, value: styleList,
                    dataInit: function (elem) {
                        var v = $(elem).val();
                        if (v != '') {
                            var data = loadSizes(elem);
                            jQuery('#curruntppeGridgrid').setColProp('sizes', { editoptions: { multiple: true, value: data } });
                            var data1 = loadUom(elem);
                            jQuery('#curruntppeGridgrid').setColProp('uom', { editoptions: { value: data1 } });
                        }
                        else {
                            jQuery('#curruntppeGridgrid').setColProp('sizes', { editoptions: { multiple: true, value: {} } });
                            jQuery('#curruntppeGridgrid').setColProp('uom', { editoptions: { value: {} } });
                        }
                    },
                    dataEvents: [{
                        type: 'change',
                        fn: function (e) {
                            loadCategoryAndManufacturer(e);
                        }
                    }]

                },
                editrules: { required: true }
            },
            {
                name: 'uom', index: 'uom', align: 'center', editable: true, hidden: false, edittype: 'select',
                editoptions: {
                    multiple: false, value: uomfList,
                    dataEvents: [{
                        type: 'change',
                        fn: function (e) {
                            setHiddenUom(e);
                        }
                    }]
                },
                editrules: { required: false }
            },
            {
                name: 'averagelifetime', index: 'averagelifetime', editable: true, align: 'center', sortable: false, editrules: { number: true, maxValue: 9999999.99 },
                editoptions: {
                    class: 'validate[custom[number]]',
                    dataEvents: [{
                        type: 'click',
                        fn: function (e) {
                            $('#formQuickSurvey').validationEngine({ promptPosition: 'bottomLeft', validationEventTrigger: 'keyup' });
                        }
                    },
                                {
                                    type: 'change',
                                    fn: function (e) {
                                        setQty(e);
                                    }
                                }
                    ]
                }
            },
            {
                name: 'averagelifetimeselect', index: 'averagelifetimeselect', editable: true, align: 'center', edittype: 'select',
                editoptions: {
                    multiple: false, value: avglifetimelist,
                    dataInit: function (elem) {
                        var v = $(elem).val();
                        if (v != '') {
                            jQuery('#curruntppeGridgrid').setColProp('averagelifetimeselectId', { editoptions: { defaultValue: v } });
                        }
                    },
                    dataEvents: [{
                        type: 'change',
                        fn: function (e) {
                            setHiddenaveragelifetimeselect(e);
                            setQty(e);
                        }
                    }]
                },
                editrules: { required: false }
            },
            {
                name: 'qty', index: 'qty', align: 'center', editable: true, editrules: { integer: true, maxValue: 2147483647 },
                editoptions: {
                    class: 'validate[custom[numbersOnly]]',
                    dataEvents: [{
                        type: 'change',
                        fn: function (e) {
                            calculateannualCost(e);
                        }
                    }, {
                        type: 'click',
                        fn: function (e) {
                            $('#formQuickSurvey').validationEngine({ promptPosition: 'bottomLeft', validationEventTrigger: 'keyup' });
                        }
                    }]
                }
            },
            {
                name: 'cost', index: 'cost', align: 'center', editable: true, editrules: { number: true, maxValue: 9999999.99 },
                editoptions: {
                    class: 'validate[custom[number]]',
                    dataEvents: [{
                        type: 'change',
                        fn: function (e) {
                            calculateannualCost(e);
                        }
                    }, {
                        type: 'click',
                        fn: function (e) {
                            $('#formQuickSurvey').validationEngine({ promptPosition: 'bottomLeft', validationEventTrigger: 'keyup' });
                        }
                    }]
                }
            },
            {
                name: 'sizes', index: 'sizes', align: 'center', edittype: 'select', classes: 'seteventclickoncurrent', editable: true, editoptions: {
                    multiple: true, value: {},
                    dataInit: function (elem) {
                        var v = $(elem).val();
                        if (v != '') {
                            jQuery('#curruntppeGridgrid').setColProp('sizesId', { editoptions: { defaultValue: v } });
                        }
                    },
                    dataEvents: [{
                        type: 'change',
                        fn: function (e) {
                            setHiddensizes(e);
                        }
                    }]
                },
                editrules: { required: false, custom: true, custom_func: checkCurrentSize }
            },
            { name: 'annualCost', index: 'annualCost', align: 'center', editable: true, editoptions: { readonly: 'readonly' } },
            {
                name: 'vp2', index: 'vp2', align: 'center', editable: true, hidden: false, edittype: 'select',
                editoptions: {
                    multiple: false, value: vp2fList,
                    dataInit: function (elem) {
                        var v = $(elem).val();
                        if (v != '') {
                            jQuery('#curruntppeGridgrid').setColProp('vp2Id', { editoptions: { defaultValue: v } });
                        }
                    },
                    dataEvents: [{
                        type: 'change',
                        fn: function (e) {
                            setHiddenvp2(e);
                            validateCategoryandVP2(e);
                        }
                    }]
                },
                editrules: { required: false }
            }
        ],
        cmTemplate: { sortable: false },
        width: eval('gridWidth()'),
        pgbuttons: false,
        pginput: false,
        viewrecords: false,
        //pager: '#curruntppeGridpager',
        toppager: true,
        multiselect: true,
        editurl: 'editsurveyppe',
        caption: 'Current PPE',
        //forceFit:true,
        hiddengrid: true,
        hidegrid: true,
        headertitles: true,
        postData: {
            appId: function () { return $('#selectApplication option:selected').val(); }
        },
        loadComplete: function () {
            $('#del_curruntppeGridgrid_top').removeClass('ui-state-disabled');//this is added to enable delete button after record reload
            if (jQuery('#curruntppeGridgrid').jqGrid('getGridParam', 'gridstate') != 'visible') {
                $("#curruntppeGridgrid_toppager").hide();
            }
            else {
                $("#curruntppeGridgrid_toppager").show();
            }
        },
        afterInsertRow: function () {//this is added to disable delete button while adding record
            $('#del_curruntppeGridgrid_top').addClass('ui-state-disabled');

        }, ajaxSelectOptions: { cache: false }
    });

    jQuery("#curruntppeGridgrid").jqGrid('navGrid', "#curruntppeGridpager",
        { cloneToTop: true, position: 'right', edit: false, add: false, del: true, search: false, refresh: false, pgbuttons: false },
        {}, {}, {
            mtype: 'POST', reloadAfterSubmit: true,
            serializeDelData: function (postdata) {
                var row = jQuery('#curruntppeGridgrid').getRowData(postdata.id);
                // append postdata with extra information
                return { id: postdata.id, oper: postdata.oper, gridId: 'current' };
            }
        }, {});

    //top toolbar
    jQuery("#curruntppeGridgrid").jqGrid('inlineNav', '#curruntppeGridgrid_toppager', {
        position: 'right',
        editParams: {
            aftersavefunc: function () {
                $("#curruntppeGridgrid").jqGrid().trigger("reloadGrid");
                $('#del_curruntppeGridgrid_top').removeClass('ui-state-disabled');//this is added to enable delete button after saveing record
            }, oneditfunc: function () {
                $('#del_curruntppeGridgrid_top').addClass('ui-state-disabled');//this is added to disable delete button while editing record
            }, afterrestorefunc: function () {
                $('#del_curruntppeGridgrid_top').removeClass('ui-state-disabled');//this is added to enable delete button while cancelling record
            }, extraparam: {
                currentApplicationId: function () { return $("#selectApplication option:selected").val(); }
            }
        },
        "restoreAfterSelect": false
    });

    jQuery('#curruntppeGridgrid').jqGrid('setGroupHeaders', {
        useColSpanStyle: true,
        groupHeaders: [{
            startColumnName: 'averagelifetime',
            numberOfColumns: 2,
            titleText: '<em>Average Lifetime</em>'
        }]
    });
});

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    我认为这是 jqGrid 中的一个错误。我在the following bug report 中发布了如何解决问题的建议。我建议修改delRowData的代码the line

    if(rowid == $t.p.selrow) {$t.p.selrow=null;}
    

    到下面的代码

    if(rowid == $t.p.selrow) {
        if ($t.p.multiselect && $t.p.selarrrow.length > 0) {
            $t.p.selrow = $t.p.selarrrow[$t.p.selarrrow.length-1];
        } else {
            $t.p.selrow = null;
        }
    }
    

    你可以找到jquery.jqGrid.src.jshere的修改版本。该代码包括对addRow 代码的一些额外小改进。我描述了我在 trirand 上发布的 the next bug report 中的改进。

    已更新:该错误已在 jqGrid 的主代码中修复(参见 here),您可以在 github 上找到该代码。所以修复将在 jqGrid 的下一个(4.4.1 更高版本)版本中进行。

    【讨论】:

    • 非常感谢奥列格。它很有效,有了它,你让我的生活变得如此轻松。
    猜你喜欢
    • 2014-05-28
    • 1970-01-01
    • 2013-03-20
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多