如何将索引处的行插入已排序的农业网格

时间:2019-03-26 18:29:55

标签: angular ag-grid

我有一个启用排序的网格设置。每行都有一个重复的按钮。复制行时,我想在复制行的下面插入新行。这适用于默认排序,但是如果您将其排序在状态等列上,则会将行随机插入到网格中,从而很难找到它。

我注意到网格在保存期间的某个时候进行了排序,但尚未得到分配新ID的响应。

我尝试使用带有addIndex的updateRowData(transaction)添加行,但是它要么不插入任何内容,要么忽略索引。

我确实可以从postSort中访问任何组件变量,但是我只会在postSort之后得到一个带有ID的响应。

cloneRow(item: any): void {
 let newRow = JSON.parse(JSON.stringify(item.data)) as Object;
 newRow.gridItemId = null;

 this.index = this.api.getFocusedCell().rowIndex;

 this.selectRow(newRow, ++index);
 this.saveRow(newRow);
}

selectRow(newRow: Object, index: number) {
 this.selectedObject = [];
 this.gridItemList.splice(index, 0, newRow);

 this.api.setFocusedCell(index, "ColumnName");
 this.api.startEditingCell({
  rowIndex: index,
  colKey: "ColumnName"
 });
}

saveRow(newRow: Object): void {
 let objectsToSave = new Array<Object>();
 objectsToSave.push(newRow);

 this.CustomService.saveRow(objectsToSave)
  .subscribe(
   (response) => {
    if (!newRow.rowId) {
     newRow.rowId = response[0].rowId;
    }
    this.gridItemList.filter(g => g.gridItemId === response[0].gridItemId)[0] = response[0];
    this.api.refreshCells();
}

postSort = function(rowNodes) {
 console.log("Post Sort");
}

预期:复制的行被插入到原始行的正下方。 实际:将复制的行插入到网格中的某个位置。

2 个答案:

答案 0 :(得分:0)

显然,agGrid本身破坏了agGrid v23.1中的addIndex功能(折旧了)……哦,但是他们决定将其与v24.1一起使用。

是的,很认真。

因此,解决此问题的最佳方法是首先检查是否有较旧版本的agGrid:

npm outdated

enter image description here

如果是这样,请使用:

npm install ag-grid-angularlatest
npm install ag-grid-community@latest
npm install ag-grid-enterprise@latest

答案 1 :(得分:-1)

  

它将行随机插入到网格中,使其很难找到。

实际上-不是(不是随机),可以通过updateRowData

插入新值

api.updateRowData({add:[listofvalues], addIndex:startIndexPosition})

要插入的对象listofvalues的列表(即使只是一个对象),以及startIndexPosition插入位置的索引将从开始的位置排序

让我们更深入,ag-grid几乎没有状态

  1. 默认:它将准确显示其传递给rowData的方式,在这种情况下,addIndex很重要,我想只能使用默认状态addInex被使用。
  2. 已排序:它将根据排序条件显示。
  3. 分组:猜测其复杂状态cuz也可以将分组定义为默认值并具有排序功能

简单的 example 演示

尝试按运动员进行排序(更改为asc,desc和默认值),然后点击添加行,您将在开始,结束和插入位置(默认情况下)看到新行状态)