我正在使用2个组合框来筛选已通过csv文件填充的dataGrid。第一个组合框过滤列并正常工作:
//Listener and function for when the Agreement ID is selected
agreement_cb.addEventListener(Event.CHANGE, agreement);
function agreement(event:Event):void
{
//get the number of columns
var columnCount:Number = myGrid.getColumnCount();
for (var i:int=0; i<columnCount; i++)
{
myGrid.getColumnAt(i).visible = false;
}
var columnNumber:Number = agreement_cb.selectedItem.data;
myGrid.getColumnAt(columnNumber).visible = true;
myGrid.getColumnAt(0).visible = true;
myGrid.columns[0].width = 200;
}
但是,除了如何从第二个下拉列表中选择的行(codes_cb)之外,我无法找到任何方法来隐藏所有行。
任何帮助表示赞赏...
更新:
loadedData = myLoader.data.split(/\r\n|\n|\r/);
loadedData.pop();
for (var i:int=0; i<loadedData.length; i++)
{
var rowArray:Array = loadedData[i].split(",");
loadedData[i] = {"SelectAgreement":rowArray[0],"KSLTPROF0057":rowArray[1] .........};
}
loadedData.shift();
myGrid.columns = ["SelectAgreement", "KSLTPROF0057", ......];
import fl.data.DataProvider;
import fl.controls.dataGridClasses.DataGridColumn;
myGrid.dataProvider = new DataProvider(loadedData);
ADataGrid
始终显示其中的所有对象dataProvider
,因此要隐藏行,您需要隐藏数据对象。某些与dataProvider
s一起工作的类具有内置的功能,这使得这变得非常容易(实现的任何类IList
都可以作为来操作dataProvider
),但是fl.data.DataProvider
不是这些类之一。
因此,如果可以的话,我会同时使用这两种方法提供答案,我强烈建议您使用mx.collections.ArrayCollection
over fl.data.DataProvider
。
fl.data.DataProvider
为此,我假设您的loadedData
数组是一个类属性,未在函数中声明。
function agreement(event:Event):void
{
//your existing code here
var dataProvider:DataProvider = MyGrid.dataProvider as DataProvider;//recover the dataprovider
dataProvider.removeAll();//remove all rows
for (var x:int = 0; x<loadedData.length; x++)
{
if (loadedData[x] == "SELECTION MATCH") //insert here your selection criteria
{
dataProvider.addItem(loadedData[x]); //add it back into the dataProvider
}
}
}
function resetFilter():void
{
var dataProvider:DataProvider = MyGrid.dataProvider as DataProvider;//recover the dataprovider
dataProvider.removeAll(); //prevent duplication
dataProvider.addItems(loadedData);//reload all rows
}
mx.collections.ArrayCollection
我之所以建议这样做,是因为ArrayCollection
已经具有执行此操作的功能,而不会因对象丢失作用域而丢失数据的风险,它还减少了您需要执行的代码/操作的数量。为此,我们使用ArrayCollection.filterFunction
&ArrayCollection.refresh()
过滤“可见数组”而不更改源。
private var dataProvider:ArrayCollection = new ArrayCollection(loadedData);
MyGrid.dataProvider = dataProvider;
function agreement(event:Event):void
{
//your existing code here
dataProvider.filterFunction = myFilterFunction;//use my filter
dataProvider.refresh();//refresh the visible list using new filter/sort
}
function resetFilter():void
{
dataProvider.filterFunction = null;//clear filter
dataProvider.refresh();//refresh the visible list using new filter/sort
}
function myFilterFunction(item:Object):Boolean
{
if (item == "SELECTION MATCH") return true;//insert your selection criteria here
else return false;
}
filterFunction接受afunction
并将其用于测试中的每个对象ArrayCollection
,该函数必须返回一个布尔值,即true
“是,显示此对象”和false
“不显示”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句