在jqGrid中编辑内联行时排序问题
我对网格的使用涉及在内联编辑模式下有几行时进行排序。在jqGrid中编辑内联行时排序问题
的问题是:
有什么办法来执行排序,而内联编辑一行或多行?
如果没有,有没有当我点击列标题,将跳的事件,而内联编辑一行或多行?(一个事件,我也许可以去掉编辑,排序内容之前)
感谢,Catalin
一个有趣的问题!从我+1。
排序编辑行或单元格的问题在于访问编辑单元格的内容。 jqGrid的当前代码不会执行此操作,因此列标题的click
事件处理函数内部会测试网格中是否存在任何编辑行。如果存在一些编辑行/行,则排序将被停止而不是以调用onSortCol
回调。
因此,只有第二种方法可以在排序之前保存或恢复编辑单元格。为了实现这个,有一个小问题。如果在列标题上绑定其他click
事件,则将在之前调用jqGrid的上一个绑定标准处理程序。因此,在之前,无法保存或放弃更改的编辑,因此会处理点击事件。可以通过两种方式解决问题:可以从新的事件处理函数调用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
被定义为var $grid = $("#list")
。你可以看到它在the following demo上的工作方式。
如果您想尝试选项2,您可以挂钩到onSortCol
事件。在那里你可以取消所有行的编辑模式,然后允许排序执行。请确保不要退回"stop"
或者排序不会发生。
单击可排序列后并在排序数据之前立即引发。
你可以得到所有的文件here。
已经尝试过。编辑网格行时不会触发。 – 2012-02-14 16:36:21
非常感谢,我会试一试 – 2012-02-15 16:01:24
作品很棒。再次感谢。 – 2012-02-16 08:37:16
@CatalinFlorea:不客气! – Oleg 2012-02-16 08:47:56