【问题标题】:Restrict user to select next row in jqgrid限制用户在 jqgrid 中选择下一行
【发布时间】:2017-01-14 17:50:33
【问题描述】:

我在我的项目中使用 jqgrid。我要求当用户选择行单击内联工具栏控件的编辑按钮修改单元格中的任何数据之后,而不是单击内联工具栏控件用户的保存按钮当时单击(选择)任何其他行。我想显示用户消息,例如

想要保存/丢弃修改过的数据

如果用户点击消息对话框的保存按钮然后保存数据,否则丢弃数据。所以请告诉我如何实现它。直到用户不点击保存或丢弃按钮不要选择用户点击的下一行

【问题讨论】:

  • 您使用(可以使用)哪个版本的 jqGrid 以及来自哪个 jqGrid 分支(free jqGrid、商业Guriddo jqGrid JS 或版本 inlineNav、formatter: "actions"、...?术语“内联工具栏控件”不清楚,因为它不会在 jqGrid、free jqGrid 或 Guriddo jqGrid JS 的文档中使用。
  • 我正在使用 Guriddo jqGrid
  • 请回答所有问题:您指的是哪种编辑按钮。您究竟是如何使用内联编辑的:inlineNavformatter: "actions"、...? 一般来说,我可以帮助您解决 free jqGrid 特定问题的常见 jqGrid 功能。如果您使用购买的商业 Guriddo,那么您可以获得支持here。我开发了 alternative fork free jqGrid,我完全免费提供。
  • 请参考下面的链接guriddo.net/demo/bootstrap,点击编辑、添加、删除行部分内联:工具栏控制按钮
  • 换句话说:你使用inlineNav

标签: jqgrid


【解决方案1】:

首先你应该使用inlineNavrestoreAfterSelect: false 选项(如果你使用inlineNav)。您可以使用beforeSelectRow 来实现所需行为并调用saveRowrestoreRow 的秒数取决于用户的选择。

beforeSelectRow 的最简单实现如下:

beforeSelectRow: function (rowid) {
    var $self = $(this),
        savedRowInfos = $self.jqGrid("getGridParam", "savedRow"),
        editingRowId = savedRowInfos == null || savedRowInfos.length < 1 ?
            null : savedRowInfos[0].id;

    if (editingRowId != null && editingRowId !== rowid) {
        if (confirm("Do you want to save the changes?")) {
            $self.jqGrid("saveRow", editingRowId);
        } else {
            $self.jqGrid("restoreRow", editingRowId);
        }
    }
}

我使用了上面的confirm 方法。您可以在the demo 上查看工作代码。

例如,也可以使用 jQuery UI 对话框创建 异步 对话框。那么beforeSelectRow的代码可能如下:

beforeSelectRow: function (rowid) {
    var $self = $(this),
        savedRowInfos = $self.jqGrid("getGridParam", "savedRow"),
        editingRowId = savedRowInfos == null || savedRowInfos.length < 1 ?
            null : savedRowInfos[0].id;

    if (editingRowId == null || editingRowId === rowid) {
        return true; // allow selection
    }

    $("#dialog-confirm").dialog({
        resizable: false,
        height: "auto",
        width: 650,
        modal: true,
        buttons: {
            "Save the changes": function () {
                $(this).dialog("close");
                $self.jqGrid("saveRow", editingRowId);
                $self.jqGrid("setSelection", rowid);
            },
            "Discard the changes": function () {
                $(this).dialog("close");
                $self.jqGrid("restoreRow", editingRowId);
                $self.jqGrid("setSelection", rowid);
            },
            "Continue editing": function () {
                var tr = $self.jqGrid("getGridRowById", editingRowId);
                $(this).dialog("close");
                setTimeout(function () {
                    $(tr).find("input,textarea,select,button,object,*[tabindex]")
                        .filter(":input:visible:not(:disabled)")
                        .first()
                        .focus();
                }, 50);
            }
        }
    });
    return false; // prevent selection
}

对应的demo是here

【讨论】:

  • 感谢您的回复。它正在工作。有没有办法检查用户是否修改了任何数据,然后只向用户显示确认消息,否则不显示任何消息。
  • @Pankaj:不客气!可以实现任何行为,但代码会更长。 jqGrid 不跟踪内联编辑期间的更改,但您可以将编辑行中的当前值与savedRowInfos[0] 对象进行比较,该对象包含编辑开始时的数据.
  • 好的。另外,如果用户选择要编辑的记录并且没有保存记录用户输入搜索条件,那么是否可以向用户显示确认消息?
  • @Pankaj:对不起,我不明白你的意思。您描述的是编辑还是搜索?您指的是哪个“搜索条件”?您是否还在编辑另一行时询问选择新行或您有关于搜索的新问题?
  • 我的意思是通过选择包含、等于、不等于等运算符过滤网格中的记录
猜你喜欢
  • 2011-11-29
  • 2011-11-04
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
相关资源
最近更新 更多