首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3数据集-隐藏一行

AS3数据集-隐藏一行
EN

Stack Overflow用户
提问于 2014-04-16 11:35:37
回答 1查看 997关注 0票数 0

我使用两个组合框来过滤通过csv文件填充的dataGrid。第一个组合框过滤列并运行良好:

代码语言:javascript
复制
//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)中选择的行之外,我找不到任何关于如何获得相同类型的函数来隐藏所有行的任何信息。

任何帮助都很感激..。

更新:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-22 10:25:57

DataGrid总是显示其dataProvider中的所有对象,因此要隐藏行,需要隐藏数据对象。一些作为dataProvider工作的类具有这样的功能,这使得这非常容易(任何实现IList的类都可以作为dataProvider来操作),但是fl.data.DataProvider不是其中的一个。

因此,我将使用这两种方法提供答案,如果可以的话,我强烈建议在fl.data.DataProvider上使用fl.data.DataProvider

第1节:fl.data.DataProvider

为此,我假设您的loadedData数组是类属性,而不是在函数中声明的。

代码语言:javascript
复制
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
}

第2节:mx.collections.ArrayCollection

我之所以建议这样做,是因为ArrayCollection已经有了这样的功能,而不会因为对象失去作用域而丢失数据,它还减少了需要执行的代码/操作的数量。为此,我们使用ArrayCollection.filterFunction & ArrayCollection.refresh()过滤“可视数组”,而不更改源。

代码语言:javascript
复制
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接受function并使用它测试ArrayCollection中的每个对象,函数必须返回布尔值,true表示“是,显示此对象”,false返回“不显示”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23108296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档