组合框,根据用户输入过滤数据提供者

时间:2015-03-02 09:54:43

标签: eclipse actionscript-3 flex flex3

我需要一个根据用户输入过滤dataprovider的组合框?

例如,如果用户输入为“CA”,则组合框将过滤数据提供者并仅显示以“CA”开头的数据。 (“加拿大”和“加利福尼亚州”)

注意:组合框是可编辑的。

并且需要在flex 3中使用这个组合框。

编辑:好吧我从javaluca得到了一些帮助,ı写了这个。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    creationComplete="createCompFonk()">
    <mx:Script>
     <![CDATA[
        import mx.controls.Text;
        import mx.controls.dataGridClasses.DataGridColumn;
     import mx.controls.TextInput;
 import mx.events.ItemClickEvent;
 import mx.events.DataGridEvent;
 import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.collections.ListCollectionView; 
import mx.controls.ComboBox

     var sayac:int=0;
     var degisken:String;

     [Bindable]
     private var initDG:ArrayCollection = new ArrayCollection([ {islem:'Tahsilat112', tarih:'01/01/2000', isim:'ATA'},{islem:'Ödeme', tarih:'02/03/2010', isim:'BETA'}      ]);




      public function createCompFonk():void{
        gggcombo.textInput.addEventListener(TextEvent.TEXT_INPUT, textChange);

      }
    protected function textChange(evt:TextEvent):void{
    (gggcombo.dataProvider as ArrayCollection).filterFunction = filterFunc;
    (gggcombo.dataProvider as ArrayCollection).refresh();
    // REFRESH IS NECESSARY
}

public function filterFunc(item:Object):Boolean{
    var pattern:String = gggcombo.textInput.text.toLowerCase();
    var string:String = item.islem;

    return pattern == string.substr( 0, pattern.length );
}
        ]]>
      </mx:Script>


  <mx:Panel x="0" y="0" width="435" height="216" 
      layout="absolute" title="Empty Default Datagrid">


   <mx:ComboBox id="gggcombo" dataProvider="{initDG}" labelField="islem" editable="true"  >


   </mx:ComboBox>
  </mx:Panel>


</mx:Application>

但是这些行有错误:

gggcombo.textInput.addEventListener(TextEvent.TEXT_INPUT, textChange);

 var pattern:String = gggcombo.textInput.text.toLowerCase();

错误是: 尝试通过静态类型mx.controls的引用访问不可访问的属性textInput:comboBox

1 个答案:

答案 0 :(得分:2)

如果您正在使用ArrayCollection Class for combobox dataprovider,则可以使用 filterFunction

在包含在组合

中的textInput上添加侦听器
myCombo.textInput.addEventListener(TextEvent.TEXT_INPUT, textChange);

在textChange

上调度的函数
protected function textChange(evt:TextEvent):void{
    (myCombo.dataProvider as ArrayCollection).filterFunction = filterFunc;
    (myCombo.dataProvider as ArrayCollection).refresh();
    // REFRESH IS NECESSARY
}

FilterFunction用于过滤dataProvider

public function filterFunc(item:Object):Boolean{
    var pattern:String = myCombo.textInput.text.toLowerCase();
    var string:String = item.name;

    return pattern == string.substr( 0, pattern.length );
}