0

我正在使用 jqGrid PHP 并添加一个操作列。编辑工作正常,但一旦保存行,网格就不会重新加载。当我手动刷新网格时,会出现更新的信息。

我曾尝试向 addCol 添加编辑选项(见下文),但我在某处读到 editOptions 仅适用于表单编辑。查看文档,似乎我可以使用 onSuccess 或 afterSave 参数,但我不确定如何将 reloadAfterSubmit 方法添加到 PHP 中的这些参数中的任何一个。

$grid->addCol(array( 
    "name"=>"Click to Edit", 
    "formatter"=>"actions", 
    "editable"=>false, 
    "sortable"=>false, 
    "resizable"=>false, 
    "fixed"=>true, 
    "width"=>45,
    "loadonce"=>false, 
    "formatoptions"=>array("keys"=>true, "editbutton"=>true, "delbutton"=>false,"editOptions"=>array("reloadAfterSubmit"=>true)) 
    ), "first"); 
4

1 回答 1

0

我正在使用 jQuery 和 jqGrid 的单元格编辑功能,它在离开每个单元格时将新的单元格值提交给服务器。在我的特定应用程序中,当单元格更改时,它可能会影响同一行中的其他(计算的)列,并且可能影响其他行中的列,因此我需要更新可能遍布整个网格的值。

在我的例子中,计算本身是在提交单元格并更新数据库时在服务器上执行的,所以我需要获取更新的数据来更新网格。我想让单元格编辑尽可能快,但也要保持行更新。我还想只更新服务器确定已修改的行。我还想要一些通用且可重复使用的东西。

我不知道这如何转换为 PHP,但这是我在 JavaScript 中所做的。

var xhrUpdate = null;

// Handle jqGrid's afterSubmitCell.
$("#someGridId").jqGrid(
    "setGridParam", 
    "afterSubmitCell",
    function (response, rowid, name, val, iRow, iCol) {

        // If an ajax request is already in progress from the last cell edit, 
        // abort it since the data is now moot with the new cell update.
        // Sorry server, nobody's listening!
        if (xhrUpdate != null) {
            xhrUpdate.abort();
            xhrUpdate = null;
        }

        // Call the generic grid update function (see below) asynchronously.
        xhrUpdate = updateGrid(
                        "someGridId", 
                        "someUpdateUrl", 
                        { someParam: someParamValue, ... }, 
                        "someIDFieldThatIdentifiesTheGridRow", 
                        true);

        // Return success.
        return [true, ""];
    });

// This function updates a jgGrid which already contains data.
// It will only update the rows and columns that are returned
// from the server.
function updateGrid(grid_id, url, data, idField, async) {
    var grid = $("#" + grid_id)
    return $.ajax({
                async: async,
                type: "GET",
                datatype: "json",
                url: url,
                data: data,
                success: function (result) {
                    // Loop over the returned rows.
                    $.each(result, function (index, row) {
                        // Loop over the returned fields in each row.
                        $.each(row, function (key, value) {
                            // Set the corresponding cell value.
                            // This won't touch any cell's that aren't 
                            // represented in the JSON data.
                            grid.jqGrid("setCell", row[idField], key, value);
                        });
                    });
                }
            });
}

注意事项:

1)这肯定会给服务器带来负担。

2) 作为异步,这不处理坏的单元格数据或来自单元格提交的其他异常服务器响应。它非常乐观,但如果需要,可以处理这些问题。

3)服务器需要有返回适当数据的智能,或者你可以返回所有内容。

抱歉,它不是 PHP,但我希望这会有所帮助。

于 2013-08-17T03:38:55.880 回答