2016-03-02 2 views
1

Im en utilisant ag-Grid, mais il y a un problème quand il filtre mes données, quand je filtre mes données dans la colonne des prix, cela fonctionne uniquement avec des points et non avec des virgules.Ag-Grid Filter Comma

Link: https://plnkr.co/edit/LDdrRbANSalvb4Iwh5mp?p=preview 

Exemple pratique: Dans la colonne de prix boîte de sélection égale et au-dessus d'insertion « 1,5 » et que d'essayer insérait « 1,5 »

Répondre

1

En effet, ce filtre est un natif.

Si vous souhaitez gérer un comportement personnalisé, définissez votre propre filtre.

Documentation: https://www.ag-grid.com/angular-grid-filtering/index.php

Une solution rapide et sale serait de singe patcher le NumberFilter comme ceci:

NumberFilter.prototype.doesFilterPass = function (node) { 
      if (this.filterNumber === null) { 
       return true; 
      } 
      var value = this.valueGetter(node); 
      if (!value && value !== 0) { 
       return false; 
      } 
      var valueAsNumber; 
      if (typeof value === 'number') { 
       valueAsNumber = value; 
      } 
      else { 
       valueAsNumber = parseFloat(value.replace(',','.')); 
      } 
      switch (this.filterType) { 
       case EQUALS: 
        return valueAsNumber === this.filterNumber; 
       case LESS_THAN: 
        return valueAsNumber < this.filterNumber; 
       case GREATER_THAN: 
        return valueAsNumber > this.filterNumber; 
       default: 
        // should never happen 
        console.warn('invalid filter type ' + this.filterType); 
        return false; 
      } 
}; 

ligne a ensuite changé ici:

valueAsNumber = parseFloat(value.replace(',','.')); 
+0

un peu d'une question secondaire mais est wid ag-grille utilisé? J'ai eu quelques problèmes en l'utilisant avec une application angulaire 2 et je trouve très difficile d'obtenir de l'aide. – Thaenor

+0

IT ne fonctionne pas, je ne peux toujours pas filtrer dans le prix en utilisant des virgules, seuls les numéros de points –

+0

@Thaenor aller sur le forum ag-grille si vous avez besoin d'aide. Angularjs 2 est encore jeune mais le développeur est très actif sur la grille actuellement, ajoutant des fonctionnalités et supportant plus de framework pour travailler avec. La grille s'intègre avec angularjs2 – Walfrat

0

donc j'ai trouvé la problème, d'abord je devais convertir la valeur a une chaîne que je devais remplacer le point par la virgule, le problème avec la réponse ci-dessus était le premier parce que du type de données et que l'ordre des propriétés de la fonction de remplacement, mais le problème est maintenant que le filtrage n'est pas correct, si je recherche en utilisant l'option égale si donne 2 valeurs, au lieu d'une fixe, le code ressemble à ceci:

code:

NumberFilter.prototype.doesFilterPass = function (node) { 

      if (this.filterNumber === null) { 
       return true; 
      } 
      var value = this.valueGetter(node); 
      if (!value && value !== 0) { 
       return false; 
      } 
      var valueAsNumber; 
      if (typeof value === 'number') { 
      value = value.toString() 
       valueAsNumber = parseFloat(value.replace('.',',')); 
      } 
      else { 
       valueAsNumber = parseFloat(value.replace('.',',')); 
      } 
      switch (this.filterType) { 
       case EQUALS: 
        return valueAsNumber === this.filterNumber; 
       case LESS_THAN: 
        return valueAsNumber < this.filterNumber; 
       case GREATER_THAN: 
        return valueAsNumber > this.filterNumber; 
       default: 
        // should never happen 
        console.warn('invalid filter type ' + this.filterType); 
        return false; 
      } 
}; 
0

Solution possible:

NumberFilter.prototype.onFilterChanged = function() {

 var filterText = utils_1.default.makeNull(this.eFilterTextField.value); 

     if (filterText && filterText.trim() === '') { 
      filterText = null; 
     } 
     var newFilter; 
     if (filterText !== null && filterText !== undefined) { 

     console.log(filterText); 

      // replace comma by dot 
      newFilter = parseFloat(filterText.replace(/,/g, '.')); 
      console.log(newFilter); 
     } 
     else { 
      newFilter = null; 
     } 
     if (this.filterNumber !== newFilter) { 
      this.filterNumber = newFilter; 
      this.filterChanged(); 
     } 
    };