2008-10-06 84 views
0

我在包含多個條目的組合框中有一個過濾器。我不想使用完全匹配來過濾數據網格,而是希望獲取選定的值,並只顯示數據字段中包含所選值的記錄。 例如:用戶選擇「新建」的值,數據網格顯示記錄內容​​可以是「新用戶」,「新人」,「這是新的」等記錄。 我認爲我需要使用RegExp,但我無法解決如何使其正常工作。 由於提前, 小號...Flex:使用包含在數據域中的組合框過濾數據網格

回答

4

像這樣的東西應該工作:

public function filter(item:Object):Boolean{ 
     var result:Boolean=false; 
     if (item.name.toUpperCase().indexOf(cbo.selectedLabel.toUpperCase()) >= 0) 
      result=true; 
     return result; 
} 

這個過濾器功能將搜索name屬性(或者任何你想過濾的)與傳遞的對象組合框當前選定的標籤,如果它找到該值,它將返回true。因此,如果它在字符串中的任何位置找到單詞「New」,它將顯示在數據網格中。 IE:「新人」,「新用戶」都會出現一次過濾。

希望這是你在找什麼。

3

您可以修改它以產生下拉篩選功能。 當前文本框過濾正在工作。所以我在這裏發佈。

聲明2字符串變量 tempString和tempString_Name 然後...

使用下面的2個功能

private function filterByTerritory(item:Object):Boolean{ 
     tempString = item.name; 
     tempString_Name = item.territory; 
     if((tempString.indexOf(sampleFilter.text,0) != -1) && 
         (tempString_Name.indexOf(terrFilterTxt.text,0) != -1)){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 
    private function doFilter():void{ 
     if((sampleFilter.text.length == 0) && 
       (terrFilterTxt.text.length == 0)) { 
      myData.filterFunction == null; 
     } 
     else{ 
      myData.filterFunction = filterByTerritory; 
     } 
     myData.refresh(); 
    } 

接受通這2個文本框數據

<mx:TextInput id="sampleFilter" change="doFilter()"/> 
    <mx:TextInput id="terrFilterTxt" change="doFilter()"/> 

簡而言之:請致電doFilte關於你想過濾發生的事件。

我很快就會過濾基於組合框的數據網格。 直到再見。我將很快成爲會員:)

+0

這是friggin真棒,比我見過的任何東西都更好。爲此歡呼,你救了我一個這樣的麻煩,我覺得我欠你晚餐。 – D3vtr0n 2010-09-10 20:19:11