我正在使用以下代码将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;
}
答案 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;
}
}
}
}