【问题标题】:How can i programmatically select or set focus to specific row in AG Grid?我如何以编程方式选择或设置焦点到 AG Grid 中的特定行?
【发布时间】:2020-07-20 02:29:17
【问题描述】:

我正在使用 AG Grid 来显示从我的后端检索到的数据。当用户单击网格中的查看/编辑图标时,我会将呼叫路由到详细信息页面,以便用户可以编辑记录。

一旦他完成,我希望他能够回到网格中并返回到与以前相同的位置。我想放置光标或选择,然后用户刚刚单击并从中返回。

问题是实现这一目标的最佳方法是什么?我假设是使用 row(node) id

我目前已经在使用网格过滤器等,因此只有之前显示的数据会在返回时显示。但也可能存在项目超出当前滚动范围的问题。假设它是 125 行,但我的默认设置一次只加载 100 行,因此该记录甚至不会在加载的网格中。

【问题讨论】:

  • 永远不要破坏“网格页面”,只是隐藏/显示它。在其上方显示“详细信息页面”等。类似于模式的工作方式。这样,网格将始终与用户离开时一样。
  • 我的数据模式是基于服务器的,由于用户可以更改所选项目的数据,我需要刷新以确保用户在网格中拥有最新的数据。

标签: angular ag-grid ag-grid-angular


【解决方案1】:

首先,看看possible API methods 的无限行模型

您需要确保您的行不存在(决定做什么,只需滚动或预加载+滚动),您可以通过getInfiniteRowCount 进行检查

喜欢:

if (this.gridApi.getInfiniteRowCount() < IndexOfYourRowHere)

如果它不存在(还),则通过setInfiniteRowCount 方法预加载数据:

this.gridApi.setInfiniteRowCount(IndexOfYourRowHere, false);

然后通过ensureIndexVisible 滚动它(当该行已经存在时,情况相同)

this.gridApi.ensureIndexVisible(IndexOfYourRowHere);

这就是你的逻辑:

if (this.gridApi.getInfiniteRowCount() < IndexOfYourRowHere) {
  this.gridApi.setInfiniteRowCount(IndexOfYourRowHere, false);
}
this.gridApi.ensureIndexVisible(IndexOfYourRowHere);

Demo

来自this page的官方演示

附注是的,这里只有Indexes 是可能的,因为这是网格理解做什么的方式,所以你需要仔细排序结果(或只是准备)以实现你的目标。

更新

 let node = this.gridApi.getDisplayedRowAtIndex(YourIndex);
 node.setSelected(true)

【讨论】:

  • 所以基本上我必须获取所选/编辑行的索引,然后当我回来时,我需要确保所有
  • 您可以使用setSelected 获取所需的rowNode ,检查更新
猜你喜欢
  • 2020-02-08
  • 2019-03-21
  • 2018-01-23
  • 2017-03-03
  • 2020-08-31
  • 1970-01-01
  • 2018-02-14
  • 2021-06-13
  • 1970-01-01
相关资源
最近更新 更多