2016-02-10 7 views
7

Ich habe ein AG Grid, wo ich versuche, eine Zeile zu löschen ... Ich bin in der Lage, die Zeile aus der Datenquelle mit "Spleiß" -Technik zu entfernen, danach möchte ich die Tabelle aktualisieren.Aber es zeigt Fehler ist der Code, den ich eine ReiheWie aktualisiere/aktualisiere ich das AG-Grid nach dem Löschen?

selectedvalue={} //this holds the selected row value 
rowData=[]; //this holds all the row data 
onRowSelected(event) { 
    this.selectedvalue = event; 
} 
deletebtn() { 
    for (let i = 0; i < this.rowData.length; i++) { 
     if (this.selectedvalue.node.data.make === this.rowData[i].make) { 
      this.rowData.splice(i, 1); 
      this.gridOptions.api.refreshView(); 
     } 
    } 
} 

Es zeigt erroe so etwas löschen bin mit -> nicht Eigentum ‚refreshView‘ undefinierten lesen kann ... Wie die Änderungen in der Tabelle nach Zeile sehen können löschen .

Antwort

14

Sie sollten die Zeilen in das Netz wieder gesetzt: nach dem Spleiß:

gridOptions.api.setRowData(gridOptions.rowData) 

Vielleicht plunkr hilft https://plnkr.co/0k4sYa

Der Autor von ag-grid erklärt dies in dem ag-Grid Forum

+0

Ugh können Sie einen Link zum ag-Grid-Forum bereitstellen, wo dies erklärt wird? Ich habe mich registriert, aber ich bin kein Enterprise-Benutzer, daher kann ich möglicherweise nicht richtig nach dieser Erklärung suchen. –

+1

Ich bin auch kein Enterprise-Benutzer. Aber Sie können das Forum immer noch ohne eins durchsuchen. Gefällt mir https://ag-grid.com/forum/showthread.php?tid=3726&pid=8876&highlight=setRowData#pid8876 –

+0

Vielen Dank! Ich konnte das in den Foren nicht finden, aber es stellt sich heraus, dass die Antwort nicht ganz aktuell ist. Siehe die Antwort von @ user3294566 unten. Ihre Antwort ist jedoch richtig für die frühen 2016 Versionen von agGrid; neuere Versionen haben einfach viel bessere API-Aufrufe, um das Entfernen einer Zeile und anschließende Aktualisierung einfach durchzuführen. –

4

Verwenden Sie für eine bessere Leistung Grid-API-Aufrufe zum Hinzufügen/Entfernen von Zeilen. erst nach einer tiefen Kopie der ursprünglichen Reihe

var selectedNodes = gridOptions.api.getSelectedNodes(); 
gridOptions.api.removeItems(selectedNodes); 

Bitte neue Zeile einzufügen:
Um eine Zeile am Anfang einfügen, dass Kopie einer ausgewählten Zeile ist:

var rowData = JSON.parse(JSON.stringify(selectedNode.data)); 
gridOptions.api.insertItemsAtIndex(0, [rowData]); 

eine ausgewählte Zeile zu entfernen .
Ansonsten verweist api weiterhin auf die gleiche Zeile.
So entfernt die nachfolgende Entfernung der neuen Zeile die ursprüngliche Zeile aus dem Raster.

Weitere Informationen finden Sie in der Dokumentation.
https://www.ag-grid.com/javascript-grid-insert-remove/

+0

Sie verwenden 'newRow' nicht irgendwo auf der Einfügung ... stattdessen haben Sie' rowData'. Ich denke, du musst das ändern. –

+1

Korrigiert, danke für die Überprüfung. – user3294566

+0

Danke für deine Antwort! Während es jetzt für mich offensichtlich ist, gab es Änderungen in der Arbeitsweise von agGrid Mitte 2017 - die ursprüngliche Frage wurde 2016 gestellt - und ich hatte tatsächlich eine * veraltete * Version von agGrid, wo Ihre eigene Antwort (die für die aktuelle Version von agGrid!) hat nicht funktioniert, dh die JS-Konsole hat einige Fehler für fehlende API-Funktionen bekommen. In der Tat, du antwortest (was ich upvoted habe :-)) ist die korrektere, aktuellere Methode, um das zu erreichen, was das OP verlangt - es gibt * nein * müssen * alle * Zeilen wieder an agGrid verfüttern, so wie es geht schien Anfang 2016 der Fall zu sein. –