在jqGrid中手动执行取消添加、编辑和删除事件

Execute cancel add, edit and delete event manually in jqGrid

我使用 jqGrid 4.5.4

当我点击 jqGrid“inlinenav”中的添加按钮时,它会在网格中创建一行。

但如果我不小心点击了另一个网格行,“添加的行”就会消失,“inlinenav”编辑和删除按钮将停止工作。

要使按钮重新开始工作,我需要再次单击添加按钮并取消包含。

有没有办法让我在方法“onSelectRow”中手动执行取消添加、编辑和删除事件?

在我的代码下面:

jQuery("#" + p_gridName).jqGrid("GridUnload");        
jQuery("#" + p_gridName).jqGrid({
    data : p_dados, 
    datatype : "local", 
    sortable : true, 
    colNames : p_header, 
    colModel : p_descriptor,
    rowNum : 20, 
    rowList : [20, 50, 100], 
    pager : '#p' + p_gridName, 
    recordpos : 'right', 
    viewrecords : true,
    multisort : true,
    sortorder : "desc", 
    width: screen.availWidth - (screen.availWidth * 3 / 100),
    height : screen.availHeight - 300, 
    ignoreCase : true, 
    multiselect : false, 
    shrinkToFit : false,
    caption: "-",
    onSelectRow : function(ids) {        
        var aux = jQuery("#" + p_gridName).jqGrid('getRowData', ids);
        valorChave = aux[p_primaryKey];            
        var $this = $(this);
        $this.jqGrid('setGridParam', {
            editurl : (ids === "new_row" ? 'EdicaoInLineAction.do?method=salvarDadosGrid&contentName=' + p_contentName :  'EdicaoInLineAction.do?method=salvarDadosGrid&contentName=' + p_contentName + '&chaveRegistro=' + valorChave)
        });
    },
    editurl : 'EdicaoInLineAction.do?method=salvarDadosGrid&contentName=' + p_contentName
});
jQuery("#" + p_gridName).navGrid('#p' + p_gridName, {
    edit : false, 
    add : false, 
    del : function(valorChave){ return true }, 
    refresh : false, 
    search : false
    },{},{}, {            
    onclickSubmit : function (rp_ge, postdata) {
        var keyValue = $(this).jqGrid("getCell", postdata, p_primaryKey);
        return {chaveRegistro : keyValue};
    },
    afterSubmit : function (response, postdata) {
        if (response != null && response.responseText != null) {
            if (response.responseText.includes("OK")) {
                alert(response.responseText);
                return [true, "", ""];
            }
            else {
                alert(response.responseText);
                return [false, "", ""];
            }
        }
    }
});
jQuery("#" + p_gridName).jqGrid('inlineNav', '#p' + p_gridName, {
    edit : true, editicon : "ui-icon-pencil", //icone para edição
    add : true, addicon : "ui-icon-plus", //icone para inclusão
    save : true, saveicon : "ui-icon-disk", //icone para salvar
    savetitle : "Salvar", //hint para salvar
    cancel : true, cancelicon : "ui-icon-cancel", //icone para cancelar
    canceltitle : "Cancelar", //hitn para cancelar
    editParams : {
        keys : false, 
        oneditfunc : null, 
        successfunc : function (response) {
            if (response != null && response.responseText != null) {
                if (response.responseText.includes("OK")) {
                    alert(response.responseText);
                    return true;
                }
                else {
                    alert(response.responseText);
                    return true;
                }
            }
        }
    },
    addParams : {
        useDefValues : true, addRowParams : {
            successfunc : function (response) {
                if(response.responseText.includes("OK")) {
                    alert(response.responseText);
                    return true;
                }
                else {
                    alert(response.responseText);
                    return true;
                }
            }
        }
    }
});

我不确定这个选项在 jqGrid 4.5.4 中是否可用,但是如果您将选项 restoreAfterSelect 设置为 false,则可以禁用此行为。此选项默认为真:

jQuery("#" + p_gridName).jqGrid('inlineNav', '#p' + p_gridName, {
    ...
    restoreAfterSelect : false,
    ...
});

P.S。 (edit) 刚刚检查 - 这个选项在 4.5.4 中可用,你可以使用它