2011-11-03 26 views
6

एक ग्रिड कॉलम को फ़िल्टर करने के लिए हम इसका उपयोग कर सकते हैं:एकाधिक extjs ग्रिड कॉलम कैसे फ़िल्टर करें?

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

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

    }     
} 

लेकिन एक साथ कई फ़ील्ड कैसे खोजें, जैसे कि:

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

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

} 

कोई विचार?

संपादित करें:

अजीब बात है दोनों ही मामलों में, केवल एक खोज से काम करता है कि:

यह काम करता है:

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

और इस काम करता है:

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

store.filter(FirstNameFilter); 

लेकिन यह नहीं करता है:

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

या यह करता है:

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

उत्तर

8

कोशिश करने के लिए

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

मैंने सवाल संपादित किया, कोई विचार? –

+0

न केवल ओपी ने उल्लेख किया कि यह काम नहीं करता है लेकिन मैं 3.2 का उपयोग कर रहा हूं (मजबूर होना) और Ext.util.Filter मौजूद नहीं है। कोई सुझाव? –

+0

हैलो इस कोड फ़िल्टर दोनों फ़ील्ड को चेक करें यदि दोनों उपलब्ध हैं और फिर परिणाम –

2

यही काम करना चाहिए। क्या ऐसा नहीं है? जैसा कि मैंने इसे समझ लिया है यदि आप दिखाए गए फ़िल्टर लागू करते हैं, तो इसे दोनों मानदंडों द्वारा फ़िल्टर करना चाहिए।

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

एक विकल्प के रूप में आप नए फ़िल्टर जोड़ने के लिए setFilter फ़ंक्शन का उपयोग करने में सक्षम होना चाहिए।

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

यदि आप कोई तर्क के साथ सेटफिल्टर का उपयोग करते हैं तो इसे केवल उन फ़िल्टरों को दोबारा लागू करना चाहिए जिन्हें आपने पहले परिभाषित किया था। अगर आप clearFilter को कॉल करते हैं तो उन्हें केवल हटा दिया जाता है। वैकल्पिक रूप से

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

, आप कस्टम तर्क के साथ एकल फ़िल्टर बना सकते हैं: इस तरह Ext.util.Filter का उदाहरण बना

+0

कौन सा फ़िल्टर किया गया, पहला नाम या अंतिम नाम? – svenlol

+0

अच्छी तरह से, यदि आप दोनों फ़िल्टर डालते हैं, तो केवल एक के साथ काम करता है, मुझे कहने की ज़रूरत है, खोज के लिए पूरे जेसन फ़िल्टर करें, इसलिए मुझे एकाधिक कॉलम पर एकाधिक फ़िल्टर चाहिए? –

8

मैं इस पोस्ट पाया, जबकि पर फिल्टर करने के लिए एक तरह से के लिए खोज या तर्क के साथ कई कॉलम (वास्तव में सभी कॉलम)। (ताकि खोज-खंड स्तंभ एक से मेल खाता है या मैच स्तंभ बी आदि) मैं की तरह एक कस्टम filterfunction साथ छानने समाप्त हो गया:

... 
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); 
    } 

यह मेरा कोड है जो पावेल से लागू है।
मेरे काम के लिए जो खोज मल्टी-कॉलम, गैर-केस संवेदनशील,OR तर्क से अनदेखा करें।

इस सहायता की आशा करें।

संबंधित मुद्दे