web-dev-qa-db-fra.com

comment prédéfinir le filtre de colonne dans ag-grid

J'ai un Ionic/Angular application utilisant ag-grid. J'aimerais que certaines grilles aient un filtre automatiquement appliqué lorsque la grille est chargée - sans que l'utilisateur n'ait à faire quoi que ce soit.

J'ai essayé ce qui suit:

onGridReady(params) {
  params.api.sizeColumnsToFit();
  // get filter instance
  var filterComponent = params.api.getFilterInstance("isActive");
  // OR set filter model and update
  filterComponent.setModel({
    type: "greaterThan",
    filter: 0
  });
  filterComponent.onFilterChanged();
}

mais cela n'a rien fait. Des idées?

9
user2429448

Reproduit votre problème dans quelques-uns de leurs exemples, semble avoir été atténué en ajoutant un petit retard. Je suppose que le DOM n'est peut-être pas encore complètement prêt, bien que la grille le soit.

Réparer:

onGridReady(params) {
params.api.sizeColumnsToFit();

setTimeout(() => {
    var filterComponent = params.api.getFilterInstance("isActive");
    filterComponent.setModel({
      type: "greaterThan",
      filter: 0
    });
    filterComponent.onFilterChanged();
    },150)
}
6
playtoh

J'ai fini par faire ça.

var FilterComponent = gridOptions.api.getFilterInstance('Status');
FilterComponent.selectNothing(); //Cleared all options
FilterComponent.selectValue('Approved')  //added the option i wanted
FilterComponent.onFilterChanged();   
5
user9915241

Je pense que le problème est que la grille réinitialise le filtre lorsque de nouvelles lignes sont chargées. Il existe plusieurs façons d'aborder cela:

  1. Les types de filtres prédéfinis ont un paramètre de filtre appelé newRowsAction
    https://www.ag-grid.com/javascript-grid-filter-text/#params

    newRowsAction : que faire lorsque de nouvelles lignes sont chargées. La valeur par défaut est de réinitialiser le filtre. Si vous souhaitez conserver l'état du filtre entre les chargements de ligne, définissez cette valeur sur "conserver".

  2. Cette réponse suggère de définir la propriété gridOptionsdeltaRowDataMode=true

  3. Vous pouvez également écouter l'un des événements de grille qui sont émis lorsque la date de la grille change, puis appliquer le filtre https://www.ag-grid.com/javascript-grid-events/#miscivers : rowDataChanged, rowDataUpdated

Ceux-ci devraient tous garder le filtre lorsque les données changent, mais je pense que vous avez encore besoin d'un peu de logique supplémentaire (définir un indicateur) si vous ne souhaitez que le filtre lors de la première charge.

1
Fabian