AG-GRID - 使用 restoreFilterModel 有效,但在恢复过滤器之前会重新绘制整个网格

AG-GRID - Using restoreFilterModel works, but entire grid is redrawn before filter is restored

我已经让我的网格使用 saveFilterModel 和 restoreFilterModel 来保存和恢复过滤器。我的 httpRequest 完成后,将重新绘制网格并 "flashes",然后应用 restoreFilterModel。因此,从功能上讲它是合理的,但从用户体验的角度来看,这是不可取的。有没有一种方法可以在不刷新网格的情况下静默更新行数据?本质上等同于 Excel VBA/Macro.

中的 "Application.ScreenUpdating = False"

我的刷新功能:

      function refreshData() {
          saveFilterModel();
          let httpRequest = new XMLHttpRequest();
          httpRequest.open('GET', '**********');
          httpRequest.send();
          httpRequest.onreadystatechange = function() {
              if (httpRequest.readyState == 4 && httpRequest.status == 200) {
                  var httpResult = JSON.parse(httpRequest.responseText);
                  gridOptions.api.setRowData(httpResult);
                  gridOptions.api.updateRowData({force : true});
                  restoreFilterModel();
              }
          };

提供了行为的gif(例如设置为每3秒请求一次数据)

ag-grid_restoreFilterModel.gif

一些尝试:

  • 在 gridOptions 中设置 deltaRowDataMode=true。这会导致网格仅对不同的数据应用更改,而不是仅替换所有数据。

  • 删除对 updateRowData() 的调用。 setRowData() 应该足够了,然后使用 updateRowdata({force: true}) 可能会导致它更新两次。

  • 在使用 setRowData() 应用新数据之前恢复过滤器模型。如果过滤器型号与默认过滤器型号不同,首先设置数据会导致闪烁,因为您会看到由于新过滤器而导致的数据更改。