在jqGrid中内联编辑行时排序列的问题

时间:2012-02-14 16:24:10

标签: jqgrid

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

问题是:

  1. 在内联编辑一行或多行时,有没有办法执行排序?

  2. 如果没有,当我在内联编辑一行或多行时单击列标题会有跳转的事件吗?(在排序内容之前我可以删除编辑的事件)

  3. 谢谢,Catalin

2 个答案:

答案 0 :(得分:7)

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

编辑行或单元格的排序问题在于对包含编辑单元格的访问权限。 jqGrid的当前代码不执行此操作,因此在列标题的click事件处理程序内部测试网格中是否有任何编辑行。如果存在某些编辑行/行,则排序将停止而不用来调用onSortCol回调。

因此,只有第二种方法可以在排序之前保存或恢复编辑单元格。要实现这一点,有一个小问题。如果在列标题上绑定了另外的click事件,则在 jqGrid的前一个绑定标准处理程序之后将其称为。因此,在处理点击事件之前,无法保存或放弃编辑已更改的。可以通过两种方式解决问题:任何一方都可以从新事件处理程序调用{​​{1}}函数,或者应该更改绑定到sortData事件的顺序。以下代码演示了第二种方法:

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。您可以在the following demo上看到它的实时工作方式。

答案 1 :(得分:1)

如果您想尝试选项2,可以挂钩onSortCol事件。在那里你可以取消所有行的编辑模式,然后允许排序执行。请确保不要返回"stop",否则根本不会进行排序。

  

在单击可排序列之后并在排序数据之前立即引发。

您可以获取所有文档here