如何在AS3中订购datagrid列?

时间:2010-11-21 19:06:19

标签: xml actionscript-3 datagrid

我正在使用以下代码将XML直接加载到数据网格中:

import flash.events.Event;
import fl.data.DataProvider;
import flash.net.URLRequest;

var loader:URLLoader = new URLLoader();

loader.addEventListener(Event.COMPLETE, directoryXMLLoaded);

function directoryXMLLoaded(e:Event){
    var dp:DataProvider = new DataProvider(new XML(e.target.data));
    directoryGrid.dataProvider = dp;
}

loader.load(new URLRequest("xml/directory.xml"));

如何根据标题重新排列列?

修改

我的XML看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<contacts>
<contact first="Moshe" last="Doe" address="555 5th St" city="Somwhere" state="AA" zip="555555" phone="555-555-5555" />
<contact first="Moshe" last="Doe" address="555 5th St" city="Somwhere" state="AA" zip="555555" phone="555-555-5555" />
<contact first="Moshe" last="Doe" address="555 5th St" city="Somwhere" state="AA" zip="555555" phone="555-555-5555" />
</contacts>

我希望列按属性的顺序显示(如第一个,最后一个,地址,城市,州,邮编,电话),但它们不是。

EDIT2:

TheDarklnl有正确的答案。我实现它略有不同但是:

function directoryXMLLoaded(e:Event){
    var dp:DataProvider = new DataProvider(new XML(e.target.data));
    directoryGrid.addColumn("first");
    directoryGrid.addColumn("last");
    directoryGrid.addColumn("address");
    directoryGrid.addColumn("city");
    directoryGrid.addColumn("state");
    directoryGrid.addColumn("zip");
    directoryGrid.addColumn("phone");
    directoryGrid.dataProvider = dp;
}

2 个答案:

答案 0 :(得分:1)

您可以使用与Array对象相同的方式对DataProvider对象进行排序。所以,如果你的列标题被命名为“columnTitles”:

dp.sortOn("columnTitles");

另外,您可以使用Array公共常量为其他排序方法提供第二个参数。

Array.CASEINSENSITIVE
Array.DESCENDING
Array.NUMERIC
Array.RETURNINDEXEDARRAY
Array.UNIQUESORT

所以如果你想要对columnTitles进行数字排序以及不区分大小写:

dp.sortOn("columnTitles", ARRAY.CASEINSENSITIVE | ARRAY.NUMERIC)

<强>更新

您可以通过在数据网格对象的columns属性的字符串数组中设置标题来对列进行排序。因此,如果您希望列的顺序与XML文件中的列相同:

directoryGrid.columns = ["first", "last", "address", "city", "zip", "phone"];

更新2

如果您想根据XML属性使用columns属性进行排序,但仍然可以更改标题文本,例如将标题大写或完全更改(“phone”可能变为“Telephone Number:”),您可以通过创建新的DataGridColumn并在将列分配给数据网格对象之前更改其headerText属性来执行此操作:DataGridColumn headerText property

当您对XML数据没有管理控制权并且不希望将XML传输到可以提供dataProvider的对象数组时,这一点尤其有用。

答案 1 :(得分:1)

好的,这是如何通过多列第一,第二,第三......以编程方式对DataGrid进行排序......

testBtn.addEventListener(MouseEvent.CLICK, testBtnClk);
function testBtnClk(e:MouseEvent):void
{
    dataGridMain.dataProvider.sort(sortOnCatDescCust);
}

function sortOnCatDescCust(a:Object, b:Object):Number {
    var aCat:String = a.Category;
    var aDesc:String = a.Description.toUpperCase();
    var aCust:String = a.Customer.toUpperCase();

    var bCat:String = b.Category;
    var bDesc:String = b.Description.toUpperCase();
    var bCust:String = b.Customer.toUpperCase();

    if(aCat > bCat)
    {
             return 1;
    }
    if(aCat < bCat)
    {
            return -1;
    }
    else
    {
        if(aDesc > bDesc)
        {
             return 1;
        }
        if(aDesc < bDesc)
        {
            return -1;
        }
        else
        {
            if(aCust > bCust){
                return 1;
            }
            if(aCust < bCust){
                return -1;
            }
            else
            {
                return 0;
            }
        }
    }
}