使用api.updateRowData(transaction)删除行对数据源没有影响

时间:2017-11-13 13:56:43

标签: javascript ag-grid

我有一个自定义单元格渲染器来删除给定的实体。

root:root

它实际上从GUI中删除了该行。没问题。

但是当用户使用以下逻辑添加另一行时;

chmod o+rwx

已删除的行也会在网格中再次显示。这意味着 dataSource 对象未更新。

我在这里做错了什么?必须在我的方案中更新 dataSource

我可以使用双向绑定吗?

3 个答案:

答案 0 :(得分:0)

Ag-grid会复制您提供给它的数据。因此,当您使用updateRowData时,ag-grid将更新它拥有的数据,而不是原始数据数组。这是一个很好的设计,可以避免意外结果和原始数据的丢失。

您的问题有两种可能的解决方案:

  1. 在您需要更新数据时随时改变您的原始数据 - 这可能会非常快速地变得非常混乱

    ---或---

  2. 使用ag-grid的内置功能,允许它更新行数据,然后当你需要对dataSource做一些事情(比如在excel中下载或发送到其他一些函数)时使用{{ 1}}用于获取ag-grid知道的数据的函数。

答案 1 :(得分:0)

要删除所选行,请使用此代码

 this.selectedNodes = this.GridOptions.api.getSelectedNodes();                   
 this.GridOptions.api.removeItems(this.selectedNodes);
 this.GridOptions.api.refreshView();    

现在选中的行将被删除。

答案 2 :(得分:0)

对于遇到这篇文章的任何人,我早就知道了,但是。

我不得不在没有选择UI的情况下将一个表中的一行添加到另一个表中并将其删除

假设我们有一个带有通用columnDefs的网格,例如headersName,字段(重要的是具有字段)等。

我们将有2列:

from pyspark.sql.types import *
from pyspark.sql.functions import *
a={"id": "D1", "class": "WARRIOR", "archetype": "Pirate Warrior", "matches": 140000, 
  "duration": 6.2, "turns": 7.5, "winrate": 58.0, "cards": [["DRG_024", 2], 
  ["CS2_146", 1], ["EX1_409", 1]]}
df=spark.createDataFrame([a]) 
df.withColumn("t",array_contains(flatten("cards"),"CS2_146")).where(col("t")=="true").show()

我所做的是:

{
   headerName: 'Name',
   field: 'name',
   cellRenderer: params => params.data.name,
   ....
},
{
   headerName: 'Age',
   field: 'age',
   cellRenderer: params => params.data.age,
   ....
},

添加/删除:[项目]-必须为数组

如果由于某些原因需要刷新(有时更改检测器不更新),则有2次AgGrid刷新options刷新单元格重新绘制行 ..在这种情况下,我将使用refreshCells()

this.gridApi.refreshCells({force:true});

this.gridApi2.refreshCells({force:true});

  • 使用过的材料:https://www.ag-grid.com/javascript-grid-data-update/
    • 部分:const item = { 'name': 'New name', 'age': 25, } * Remove a row - if the grid already have this item this.gridApi.updateRowData({ remove: [item] }); * Add row - if the grid doesn't have it gridApi2 is your seconds grid table api this.gridApi2.updateRowData({ add: [item] });
    • 方法:方法2-交易

这对我有用。当然在这里我们假设我们有一个网格工作,例如(gridReady)=“ onGridReady($ event)”