0

我在一个页面上有两个 jqGrid。这个想法是在下拉值更新时显示确认对话框,并且当用户按下回车键保存记录时,两个 jqGrid 都会重新加载。

这是我的列模型:

{
    key: false, name: 'InterestedValue', index: 'InterestedValue', editable: true,
    sortable: false, formatter: 'select', width: '120px', search: false,
    edittype: 'select',
    editoptions: {
        value: InterestedStatusList,
        //afterSaveCell: function (rowid, cellname, value, iRow, iCol) {
        //    alert("after savecell" + rowid + " cellname= " + cellname);
        //    //$(this).trigger('reloadGrid');
        //},
        successfunc: function (response) {
            alert("success");
            //FLAG = true;
            $(this).trigger('reloadGrid')
            return true;
        }

    }
},

和事件,

serializeRowData: function (postdata) {
   var response = JSON.stringify(postdata);
   var s = '';
   $(postdata).each(function (index, data) {
       //s += '<option value="' + index + '">' + data + '</option>';
       $.each(data, function (k, v) {
           if(k=="InterestedValue")
            s += v;//'<option value="' + k + '">' + v + '</option>';
       });

   });
   //
   if (s == "2_1") {
       if (confirm('Are you sure you want to deactivate this record? ')) {
           // do things if OK
           return postdata;
       }
       else
           return false;
   }
   return postdata;
},

我能够在serializeRowData事件发生后使用数据调用编辑操作方法。但是我不知道在更新成功后如何触发网格的重新加载。所以请告诉我在serializeRowData. 我也在列中尝试了successfunc,但是只要我单击该行并进入编辑模式,就会触发它。

4

2 回答 2

0

如果用户选择“危险”值并且在值将被发送到服务器之前,您可以考虑显示确认对话框。要实现这一点,您可以使用

{
    name: 'InterestedValue', ...
    edittype: 'select',
    editoptions: {
        value: InterestedStatusList,
        dataEvents: [
            {
                type: 'change',
                fn: function () {
                    var newValue = $(this).val();
                    if (newValue === "2_1" && !confirm('Are you sure you want to deactivate this record?')) {
                        $(this).val("2_0"); // set some another value
                    }
                }
            }
        ]
    }
}

或者,您可以使用beforeEditRow内联编辑的回调,但您应该指定它的确切位置取决于如何使用内联编辑(直接调用editRow、使用inlineNav、使用formatter: "actions"或其他)以及 jqGrid 的版本(直到版本 4.7 )、免费的 jqGrid(请参阅自述文件和wiki)或您使用的Guriddo jqGrid JS 。

于 2015-04-18T12:43:25.827 回答
0

感谢@Oleg 的详细信息。

我之前发布的serializeRowData方法能够在停用记录之前为用户设置 JavaScript 确认对话框。这是在服务器上完成更新后我设法重新加载 jqGrids 的方法。

我使用了editRow

$(gridId).jqGrid("editRow", 'kkk', true, '', '', '', '', reload)

在 reload 方法中,我触发了 jqGrids 的重新加载为

function reload(rowid, result) {
var s = '';
var o = false;
var postdata = JSON.stringify(result);
$(jQuery.parseJSON(postdata)).each(function (index, data) {
    $.each(data, function (k, v) {
        s += k + ":" + v + " --- ";
        if (k == "responseText")
        {
            if (v.indexOf("Deactivated") != -1)
                o = true;
        }
        s += k + ":" + v + " --- ";
    });

});

if (o ==true) {
    //reload both grids
    $("#grid1").trigger("reloadGrid");
    $("#grid2").trigger("reloadGrid");
}  }

希望有帮助。

于 2015-04-23T08:56:52.207 回答