2011-11-03 10 views
6

Per filtrare una colonna della griglia possiamo usare:Come filtrare più colonne della griglia di extjs?

{ 
    xtype: 'button', 
    text:'Search', 
    handler:function(){ 

     store.clearFilter(); 
     var searchValue = Ext.getCmp("textFieldId").getValue(); 
     store.load().filter('GridFieldName', searchValue); 

    }     
} 

ma come cercare campi multipli in una sola volta, qualcosa di simile:

{ 
    xtype: 'button', 
    text:'Search', 
    handler:function(){ 

     store.clearFilter(); 
     var searchValue = Ext.getCmp("textFieldId").getValue(); 
     store.filter([ 
      {property: "GridFieldName", value: searchValue}, 
      {property: "GridFieldName1", value: searchValue} 
     ]); 
    }     

} 

tutte le idee?

EDIT:

La cosa strana è che in entrambi i casi, solo di ricerca singola opera:

Questo funziona:

store.filter([ 
     { property: "FirstName", value: searchValue } 
]); 

e questo funziona:

var FirstNameFilter = new Ext.util.Filter({ 
    property: "FirstName", value: searchValue 
}); 

store.filter(FirstNameFilter); 

ma questo non:

store.filter([ 
     { property: "FirstName", value: searchValue }, 
     { property: "LastName", value: searchValue } 
]); 

o fa questo:

var filters = [ 
    new Ext.util.Filter({ 
      property: "FirstName", value: searchValue 
    }), 
    new Ext.util.Filter({ 
      property: "LastName", value: searchValue 
    }) 
]; 
store.filter(filters); 

risposta

8

Tentare di creare istanze di Ext.util.Filter come questo:

var filters = [ 
new Ext.util.Filter({ 
    property: "GridFieldName", value: searchValue 
}), 
new Ext.util.Filter({ 
    property: "GridFieldName1", value: searchValue 
}) 
]; 
store.filter(filters); 

In alternativa, è possibile creare a filtro singolo con logica personalizzata:

var filters = [ 
    new Ext.util.Filter({ 
     filterFn: function(item){ 
     return item.get('GridFieldName') == searchValue && item.get('GridFieldName1') == searchValue; 
     } 
    }) 
]; 
store.filter(filters); 
+0

ho modificato la domanda, qualche idea? –

+0

Non solo l'OP ha menzionato che questo non funziona, ma sto usando 3.2 (essendo forzato a) e Ext.util.Filter non esiste. Eventuali suggerimenti? –

+0

ciao questo filtro del codice controlla entrambi i campi se entrambi sono disponibili e poi restituiscono il risultato –

2

che dovrebbe funzionare. Non è? A quanto ho capito, se applichi i filtri come hai mostrato, dovrebbe filtrare in base a entrambi i criteri.

store.filter([ 
    {property: "GridFieldName", value: searchValue}, 
    {property: "GridFieldName1", value: searchValue} 
]); 

In alternativa, è possibile utilizzare la funzione setFilter per aggiungere nuovi filtri.

store.setFilter("GridFieldName", searchValue) 
store.setFilter("GridFieldName1", searchValue) 

Se si utilizza setFilter senza argomenti, è sufficiente riapplicare i filtri definiti in precedenza. Vengono rimossi solo se chiami clearFilter.

+0

Quale filtro, firstName o LastName? – svenlol

+0

beh, nessuno se si mettono entrambi i filtri, funziona solo con uno, ho bisogno di dire, filtro intero json per searchValue, quindi ho bisogno di più filtri su più colonne? –

8

ho trovato questo post durante la ricerca di un modo per filtrare più colonne (in realtà TUTTE le colonne) con logica OR. (Così la ricerca clausola corrisponde colonna A o B corrisponde colonna ecc) ho finito il filtraggio con un filterfunction personalizzato come:

... 
var regex = RegExp('Insert searchclause here', 'i'); 
store.filter(new Ext.util.Filter({ 
    filterFn: function (object) { 
     var match = false; 
     Ext.Object.each(object.data, function (property, value) { 
      match = match || regex.test(String(value)); 
     }); 
     return match; 
     } 
})); 

HTH

4
store.clearFilter(); 
    var searchValue = Ext.getCmp("textFieldId").getValue(); 
    if (!!searchValue) { 
     var filters = [ 
      new Ext.util.Filter({ 
       filterFn: function (item) { 
        return item.get('FirstName').toLowerCase().indexOf(searchValue.toLowerCase()) > -1         
         || item.get('LastName').toLowerCase().indexOf(searchValue.toLowerCase()) > -1; 
       } 
      }) 
     ]; 
     store.filter(filters); 
    } 

Questo è il mio codice che si applicano da Pavel.
Per il mio lavoro che ricerca Multi-column, Non sensibile al maiuscolo/minuscolo, Ignora la posizione per la logica OR.

Spero che questo aiuto.

Problemi correlati