【问题标题】:Reload does not work重新加载不起作用
【发布时间】:2018-06-04 15:38:32
【问题描述】:

在我的 jqGrid 中,我使用了 multiselect 参数,以便每一行都有一个复选框。 网格显示一个列表,其中每一行都具有“打开”状态。可以检查许多行,当单击“关闭分包商的故障”按钮时,所有勾选的条目将被分配一个新的“关闭”状态。 由于此网格仅显示“打开”条目,因此需要重新查询数据库并且需要显示打开条目的新列表。 为此,需要用新数据重新加载网格。 目前 reloadGrid 不起作用,显示的数据与之前相同。

$(function () {
    getDataForGrid(populateGrid);
});

var populateGrid = function (data) {
    var grid = $("#grid");
    grid.jqGrid({
        data: data,
        multiselect: true,
        colNames: ["Category", "Description", "Opened", "Urgency", "Location"],
        colModel: [
            { name: "category", index: "category", width: 200, align: "left" },
            { name: "description", index: "description", width: 200, align: "left" },
            {
                name: "dateOpened",
                index: "dateOpened",
                width: 100,
                align: "left",
                formatter: "date",
                formatoptions: { newformat: "d-M-Y" }
            },
            { name: "urgency", label: "urgency", width: 200, align: "left" },
            { name: "location", label: "location", width: 100, align: "left" }
        ],
        //guiStyle: "bootstrap",
        prmNames: { id: "faultId" },
        localReader: { id: "faultId" },
        cmTemplate: { autoResizable: true },
        rowNum: 20,
        pager: "#pager",
        shrinkToFit: true,
        rownumbers: true,
        sortname: "category",
        viewrecords: true
    }).jqGrid("gridResize")
        .navGrid("#pager", {
            edit: false,
            add: false,
            del: false,
            search: false,
            refresh: false
        }).navButtonAdd("#pager",
        {
            caption: "Close Faults from Subcontractor",
            buttonicon: "ui-icon-circle-check",
            position: "first",
            title: "Blue Button",
            onClickButton: function () {
                var pdfFile = $("#documentName").val();
                if (pdfFile === undefined || pdfFile === null || pdfFile.length === 0) {
                    errorValidationMessage("You must upload a Subcontractor's confirmation pdf first before closing faults");
                    return false;
                }

                var selRowIds = grid.jqGrid("getGridParam", "selarrrow");
                if (selRowIds.length === 0) {
                    errorValidationMessage("You did not select any faults to close");
                    return false;
                }

                var contractSubcontractorId = GetHiddenField("sir-contract-subcontractor-id");
                var documentName = pdfFile.replace(/\\/g, "/").replace(/.*\//, "");
                var url = GetHiddenField("sir-close-faults-from-subcontractor-url");
                var postData = JSON.stringify({ faultIds: selRowIds, contractSubcontractorId: contractSubcontractorId, documentName: documentName });
                var callback = reloadGrid;
                dataService.putData(url, postData, callback);
            }
        });
    $("#divLoading").hide();
}

var getDataForGrid = function (callback) {
    var url = GetHiddenField("sir-get-open-faults-list");
    dataService.getList(url, callback);
}

var reloadGrid = function () {
    showSuccessMessage("Selected Properties Closed");
    getDataForGrid(reloadGridWithUpdatedData);
}

var reloadGridWithUpdatedData = function (data) {
    var grid = $("#grid");
    grid.jqGrid("setGridParam", { data: data });
    grid.trigger("reloadGrid", data);
}

【问题讨论】:

    标签: jqgrid free-jqgrid


    【解决方案1】:

    在我看来,您的问题的原因在于setGridParam 的使用。仅当您更改不是数组的参数时,该方法才应该起作用。您当前的代码合并旧的data 与新的代码(参见setGridParam 的代码的the main line,它调用$.extend 的深层版本)。如果是数组,您应该使用setGridParam 的第二个(overwrite)参数:

    var reloadGridWithUpdatedData = function (data) {
        var grid = $("#grid");
        grid.jqGrid("setGridParam", { data: data }, true);
        grid.trigger("reloadGrid");
    }
    

    或者根本不使用setGridParamgetGridParam 方法将引用提供给内部对象,该对象包含所有参数。它允许以非常简单的方式替换(覆盖)任何参数:

    var reloadGridWithUpdatedData = function (data) {
        var grid = $("#grid"),
            p = grid.jqGrid("getGridParam"); // get reference to all parameters
        p.data = data; // replace data parameter
        grid.trigger("reloadGrid");
    }
    

    【讨论】:

    • 谢谢你。再次奥列格来救援!
    猜你喜欢
    • 2017-12-29
    • 2012-05-31
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多