【问题标题】:Preserve record when InLineEditing JQGrid gives error when adding or changing当 InLineEditing JQGrid 在添加或更改时出现错误时保留记录
【发布时间】:2020-07-01 11:32:13
【问题描述】:

我正在使用 InLineEditing JQGrid,并且在添加或更改记录时,如果失败,记录就会消失。我需要保留这些行,以便用户更正错误信息并再次尝试保存记录。

在我的 sn-p 代码下面

jQuery("#" + p_gridName).jqGrid('inlineNav', '#p' + p_gridName, {
    edit : true, editicon : "ui-icon-pencil", 
    add : true, addicon : "ui-icon-plus",
    save : true, saveicon : "ui-icon-disk", savetitle : "Salvar",
    cancel : true, cancelicon : "ui-icon-cancel", canceltitle : "Cancelar",
    editParams :  {
        keys : false, oneditfunc : null, successfunc : function (response) {                    
            if (response != null && response.responseText != null) {                                                
                if (response.responseText.includes("OK")) {
                    alert(response.responseText);
                    reloadDataGrid(p_gridName, p_contentName, p_filtroGrid);
                    atualizaInfoStatusNavegacao('edit', valorChave, p_primaryKey, p_contentName);
                    return true;
                } else {
                     alert(response.responseText);
                     return true;
                }
            }
        }, afterrestorefunc: function (rowid) {
                alert("after restore func");
                return rowid;
        }, restoreAfterError : false
    },
    addParams :  {
        useDefValues : true, addRowParams :  {
             successfunc : function (response) {
                 if (response.responseText.includes("OK")) {
                     alert(response.responseText);
                     reloadDataGrid(p_gridName, p_contentName, p_filtroGrid);
                     return true;
                 } else {
                     alert(response.responseText);
                     return true;
                 }
            }
        }
    }
});

【问题讨论】:

    标签: jqgrid


    【解决方案1】:

    有一个名为 restoreAfterError 的选项(请参阅文档here),默认情况下为 true。将其设置为 false 以获得所需的行为。

    这是editRow或saveRow中的一个选项(参数)。

    编辑

    您的代码应该返回 true 或更好的数组,第一个值为 true/false 和这样的消息

            if (response != null && response.responseText != null) {                                                
                if (response.responseText.includes("OK")) {
                    alert(response.responseText);
                    reloadDataGrid(p_gridName, p_contentName, p_filtroGrid);
                    atualizaInfoStatusNavegacao('edit', valorChave, p_primaryKey, p_contentName);
                    return [true,''];
                } else {
                     return [false, response.responseText];
                }
            } else {
                return [false, 'no response from the server'];
            }
    

    【讨论】:

    • 为了在 InLineEditing JQGrid 中保存和更改记录,我使用 addParams 和 editParams。如何在这些结构中调用“restoreAfterError”方法?
    • 我把代码sn-p放在上面是为了更好理解
    • 我已将您指向文档,但您似乎没有阅读 InLineEditiing 导航器的文档。如上所述,此参数应添加到 editParamsaddRowParams (不是 addParams)
    • Tony,在 editParams 部分中,我在 "successfunc" 参数之后插入了 "afterrestorefunc" 和 "restoreAfterError" 属性,但它不起作用。我更新了主要问题中的代码 sn-p 以便更好地理解。例如,如果我尝试在数据库中包含一条给出错误的记录,JQGrid 是否将其理解为“afterrestorefunc”、“restoreAfterError”或“successfunc”?
    • 如果错误来自服务器,你应该像你一样使用successfunc。如果服务器出现问题,您应该返回 false。从您的代码中可以看出,您在这两种情况下都返回 true,这意味着一切正常,与服务器中的错误无关。所以恕我直言,你的代码应该看起来像我编辑的答案。您可以像我的代码一样返回真/假或数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多