jqgrid - 在 jqGrid 中内联编辑行时出现排序列的问题

标签 jqgrid

我对网格的使用涉及排序,同时在内联编辑模式下有几行。

问题是:

  • 有没有办法执行排序,同时内联编辑一行或多行?
  • 如果没有,当我在内联编辑一行或多行时单击列标题时是否有一个事件会跳转?(在对内容进行排序之前我可以删除编辑的事件)

  • 谢谢,卡塔林

    最佳答案

    一个有趣的问题! +1 来自我。

    编辑行或单元格排序的问题在于对编辑单元格的包含的访问。 jqGrid 的当前代码在 click 内部不这样做,所以列标题上的事件处理程序测试网格中是否有任何编辑行。如果存在一些编辑行,则排序将停止,无需调用 onSortCol打回来。

    因此,只有在排序之前保存或恢复编辑单元格的第二种方式是可能的。要实现这一点,有一个小问题。如果一个绑定(bind)额外的click列标题上的事件,它将在 jqGrid 的上一个绑定(bind)标准处理程序之后调用。因此,在处理单击事件之前,无法保存或丢弃更改的编辑。可以通过两种方式解决问题:一种可以调用sortData。来自新事件处理程序的函数,或者应该将绑定(bind)顺序更改为 click事件。以下代码演示了第二种方法:

    $.each($grid[0].grid.headers, function () {
        var $th = $(this.el), i, l, clickHandler, clickHandlers = [],
            currentHandlers = $th.data('events'),
            clickBinding = currentHandlers.click;
    
        if ($.isArray(clickBinding)) {
            for (i = 0, l = clickBinding.length; i < l; i++) {
                clickHandler = clickBinding[i].handler;
                clickHandlers.push(clickHandler);
                $th.unbind('click', clickHandler);
            }
        }
        $th.click(function () {
            var p = $grid[0].p, savedRow = p.savedRow, j, len = savedRow.length;
            if (len > 0) {
                // there are rows in cell editing or inline editing
                if (p.cellEdit) {
                    // savedRow has the form {id:iRow, ic:iCol, name:nm, v:value}
                    // we can call restoreCell or saveCell
                    //$grid.jqGrid("restoreCell", savedRow[0].id, savedRow[0].ic);
                    $grid.jqGrid("saveCell", savedRow[0].id, savedRow[0].ic);
                } else {
                    // inline editing
                    for (j = len - 1; j >= 0; j--) {
                        // call restoreRow or saveRow
                        //$grid.jqGrid("restoreRow", savedRow[j].id);
                        $grid.jqGrid("saveRow", savedRow[j].id);
                    }
                }
            }
        });
        l = clickHandlers.length;
        if (l > 0) {
            for (i = 0; i < l; i++) {
                $th.bind('click', clickHandlers[i]);
            }
        }
    });
    

    在哪里 $grid被定义为 var $grid = $("#list") .你可以在 the following demo 上看到它是如何工作的。 .

    关于jqgrid - 在 jqGrid 中内联编辑行时出现排序列的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9280418/

    相关文章:

    javascript - Jqgrid日期名称和日期列的日期排序问题

    jquery - jqGrid数据存储在浏览器缓存中?

    javascript - 如何让saveRow函数等待jqGrid中的editRow函数

    jquery - 谷歌浏览器 - 请求的资源上不存在 Access-Control-Allow-Origin header

    jquery - jqgrid 和 jqPivot : How to remove grouping when xDimension have multi value?

    jqgrid - 动态更改JQgrid列名

    json - jqGrid 工具栏搜索,使用 json 数据自动完成

    java - jqGrid组合框: how to add values Dynamically

    javascript - JQGrid MultiSelect 获取列数据

    javascript - jqGrid - 在 IE 中产生 SCRIPT5007 错误,但在本地主机上工作