我有一個應用程序輪詢數據庫並在運行時更新jqGrid。我正在使用數據類型:「本地」,以便有能力在客戶端操縱數據而無需重新加載所有內容。jqGrid:執行排序而不刷新整個網格
我第一次嘗試更新數據本身,更新了網格的數據並重新加載了它。這工作,但在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);
}
This works great。選擇沒有重置,沒有閃爍,但是最後一個問題是:這些行沒有被使用。
更新的任何行都保留在原來的位置,並且添加的任何行都不在正確的位置。我可以使用「sortGrid」方法,但隨後我們又回來刷新整個網格。我可以使用addRowData方法的「position」和「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);
}
我在你的問題的答案中添加了對[答案](http://stackoverflow.com/a/10461964/315935)的其他參考。 – Oleg