我有一个在运行时轮询数据库并更新 jqGrid 的应用程序。我正在使用 datatype: "local" 以便能够在客户端操作数据而无需重新加载所有内容。
我的第一次尝试更新了该数据本身,更新了网格的数据并重新加载了它。这行得通,但是在 IE8(不幸的是我们的主要目标)中,当滚动条重置到其原始位置时会出现闪烁。还有一个问题是选择被重置,但这个问题是可以解决的。
grid.setGridParam({ data: localData });
var scrollPosition = grid.closest(".ui-jqgrid-bdiv").scrollTop();
grid.trigger('reloadGrid');
grid.closest(".ui-jqgrid-bdiv").scrollTop(scrollPosition);
我的第二次尝试根据操作更新各个行本身。
if (toUpdate) { /* Not auto sorted */
grid.jqGrid('setRowData', entityUpdate.EntityId, entityUpdate);
}
else if(toAdd) { /* Not auto sorted */
grid.jqGrid('addRowData', entityUpdate.EntityId, entityUpdate);
}
else if(toDelete) {
grid.jqGrid('delRowData', entityUpdate.EntityId);
}
这很好用。选择没有重置,没有闪烁,但是还有最后一个问题:行没有重新排序。
任何更新的行都保留在原处,并且添加的任何行都没有放在正确的位置。我可以使用“sortGrid”方法,但随后我们又要刷新整个网格。我可以使用 addRowData 方法的“位置”和“srcrowid”参数的组合,以便将其放置在正确的位置,但我必须知道确切的放置位置。有没有办法使用内置的排序算法来找到放置它的位置?代码将变为:
if (toUpdate) {
grid.jqGrid('delRowData', entityUpdate.EntityId);
grid.jqGrid('addRowData', entityUpdate.EntityId, entityUpdate, ?, ?);
}
else if(toAdd) {
grid.jqGrid('addRowData', entityUpdate.EntityId, entityUpdate, ?, ?);
}
else if(toDelete) {
grid.jqGrid('delRowData', entityUpdate.EntityId);
}