我需要一个根据用户输入过滤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
答案 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 );
}