J'ai la réponse ci-dessous du service, chaque fois que le drapeau
est vrai, je dois masquer la ligne entière (au total 20 colonnes que j'ai) sinon le montrer. Comment puis-je réaliser cela dans ag-grid?
this.filterOptions = { useExternalFilter: true }; this.gridOptions = { filterOptions: this.filterOptions };
J'ai essayé le useExternalFilter
comme ci-dessous, puis je suis resté bloqué sur la façon d'utiliser ce useExternalFilter
plus loin. Quelqu'un peut-il me guider.
data = { name: "A", flag: true }, { name: "B", flag: false }, { name: "C", flag: false }
4 Réponses :
Le moyen le plus simple de le faire est de filtrer d'abord vos données en fonction de la valeur de l'indicateur
this.gridOptions.setRowData(this.filteredData);
Ensuite, définissez ce filteredData comme données de grille
const filteredData = this.data.filter(item => !item.flag);
J'espère que cela fera le nécessaire
Même si nous pouvons utiliser la grille supprime toutes les sélections et filtres précédents, et
écrase les anciennes données par les nouvelles. C'était la première façon dont la grille
a fonctionné et est le moyen le plus «brutal». En tant que tel, je vous recommande d'utiliser plutôt Cette méthode est préférée, comme La grille conserve tout le tri, le regroupement et le filtrage actifs, y compris
mise à jour pour refléter les changements dans les données en cas de tri,
le regroupement ou le filtrage soit affecté. Premièrement, nous pouvons obtenir la liste des objets qui doivent être supprimés. Ensuite, nous utilisons J'ai créé une une démo fonctionnelle pour illustrer le comportement ci-dessus. api.setRowData (newData)
pour mettre à jour / supprimer explicitement vos données, cette méthode réinitialise essentiellement votre grille entière. Selon la documentation , cela donne ce qui suit:
transaction.remove
. Selon la documentation , vous pouvez soit fournir rowNodeId
pour supprimer les lignes, ou nous pouvons supprimer les lignes en utilisant les lignes basées sur la référence d'objet.
api.updateRowData (transaction)
pour effectuer la transaction afin de mettre à jour les données de ligne de telle sorte que ces lignes soient supprimées. const removeData = this.data.filter(item => item.flag);
this.gridApi.updateRowData({ remove: removeData });
@DilaniAlwis Votre réponse est correcte à 100% :) Je propose simplement une solution alternative.
ce que vous voulez, c'est ceci:
this.gridOptions = { // is always present, so return true isExternalFilterPresent: function() { return true; }, // return true if flag=true doesExternalFilterPass: function(rowNode) { return rowNode.data.flag; } };
voir ag-Grid Docs pour plus de détails
Si vous souhaitez filtrer plus dynamiquement, vous pouvez utiliser la méthode de liaison
this.gridOptions = { // is always present, so return true isExternalFilterPresent: function() { return true; } } ngOnInit() { this.gridOptions.doesExternalFilterPass = this.isVisible.bind(this) } isVisible(rowNode): boolean { // Write your logic. You can use rowNode and all component valiables. }