如何设置Slickgrid中选择的最后添加的行

问题描述 投票:0回答:1

我正在向slickgrid添加新行,如下所示:

this.dataset.push(
      {
        id: idObjet,
        id_objet: idObjet,
        name: ElementType[elementType] + '-' + idObjet.toString(),
        type: ElementType[elementType],
        delete: 0,
      }
    );

    this.angularGrid.dataView.refresh();

此时,我要突出显示这一行。因此,我首先检索该行的索引:

const rowIndex = this.dataView.getIdxById(id);

然后我尝试使用以下方法将此行设置为选定的位置:

this.slickGrid.setSelectedRows([rowIndex]);

但是它不会突出显示/选择最后添加的行。此命令可用于网格中的任何其他现有行。

是否由于尚未呈现行视图,所以无法选择它?这是一种解决方法吗?

angular slickgrid angular-slickgrid
1个回答
0
投票

请注意,我是Angular-Slickgrid的作者

您可以使用Grid Service中的addItem方法,默认情况下它将突出显示该行。看一下此Example,但是默认情况下不会选择该行,但是该方法上有一个附加选项,您可以使用selectRow: true

对于我提到的那个示例,这是执行此操作的代码。

angularGridReady(angularGrid: AngularGridInstance) {
    this.angularGrid = angularGrid;
    this.dataView = angularGrid.dataView;
    this.grid = angularGrid.slickGrid;
    this.gridService = angularGrid.gridService;
}

addNewItem(insertPosition?: 'top' | 'bottom') {
    const newId = this.dataset.length;
    const randomYear = 2000 + Math.floor(Math.random() * 10);
    const randomMonth = Math.floor(Math.random() * 11);
    const randomDay = Math.floor((Math.random() * 29));
    const randomPercent = Math.round(Math.random() * 100);

    const newItem = {
      id: newId,
      title: 'Task ' + newId,
      duration: Math.round(Math.random() * 100) + '',
      percentComplete: randomPercent,
      percentCompleteNumber: randomPercent,
      start: new Date(randomYear, randomMonth, randomDay),
      finish: new Date(randomYear, (randomMonth + 2), randomDay),
      effortDriven: true
    };
    this.angularGrid.gridService.addItem(newItem, { position: insertPosition, selectRow: true });
  }

请注意,addItem仅支持topbottom的位置(它们基本上将插入网格的第一行或最后一行)。

如果您真的希望在网格中的特定行索引处插入行,则必须查看如何实现此addItem方法here。 Grid Service中的所有方法基本上都是辅助方法,它们都使用SlickGrid和DataView方法进行最终执行。另请注意,突出显示要处理起来有些棘手,您需要使用SlickGrid MetaData更改该行上的CSS类(第二秒添加/删除css类)以模拟突出显示,因此这是另一个原因只需使用网格服务即可。

© www.soinside.com 2019 - 2024. All rights reserved.