gpt4 book ai didi

apache-flex - 如何根据多列对 flex 数据网格进行排序?

转载 作者:行者123 更新时间:2023-12-04 02:32:41 25 4
gpt4 key购买 nike

我有一个数据网格,填充如下所示。当用户单击列标题时,我想使用字典排序对行进行排序,其中首先使用所选列,然后以从左到右的顺序使用其余列以打破任何关系。我该如何编码?

(我有一个答案,我将在下面发布,但它有一个问题——如果有人能提供更好的答案,我会很高兴!)

这是布局:

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="onCreationComplete()">

<mx:Script source="GridCode.as" />

<mx:DataGrid id="theGrid" x="61" y="55" width="466" height="317">
<mx:columns>
<mx:DataGridColumn dataField="A"/>
<mx:DataGridColumn dataField="B"/>
<mx:DataGridColumn dataField="C"/>
</mx:columns>
</mx:DataGrid>

</mx:Application>

这是支持代码:
import mx.collections.ArrayCollection;
import mx.collections.Sort;
import mx.collections.SortField;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.events.DataGridEvent;

public function onCreationComplete():void
{
var ar:ArrayCollection = new ArrayCollection();
var ob:Object;
for( var i:int=0; i<20; i++ )
{
ob = new Object();
ob["A"] = i;
ob["B"] = i%3;
ob["C"] = i%5;
ar.addItem(ob);
}
this.theGrid.dataProvider = ar;
}

最佳答案

到目前为止,我发现的最佳答案是在用户单击时捕获 headerRelease 事件:

<mx:DataGrid id="theGrid" x="61" y="55" width="466" height="317"
headerRelease="onHeaderRelease(event)">

然后事件处理程序可以对数据应用排序顺序:
private var lastIndex:int = -1;
private var desc:Boolean = false;

public function onHeaderRelease(evt:DataGridEvent):void
{
evt.preventDefault();

var srt:Sort = new Sort();
var fields:Array = new Array();

if( evt.columnIndex == lastIndex )
{
desc = !desc;
}
else
{
desc = false;
lastIndex = evt.columnIndex;
}

fields.push( new SortField( evt.dataField, false, desc ) );
if( evt.dataField != "A" )
fields.push( new SortField("A", false, desc) );
if( evt.dataField != "B" )
fields.push( new SortField("B", false, desc) );
if( evt.dataField != "C" )
fields.push( new SortField("C", false, desc) );
srt.fields = fields;

var ar:ArrayCollection = this.theGrid.dataProvider as ArrayCollection;
ar.sort = srt;
ar.refresh();
}

但是这种方法有一个众所周知的问题,即列标题不再显示小箭头来显示排序方向。这是调用的副作用
evt.preventDefault()
但是,您必须进行该调用,否则将不会应用您的自定义排序。

关于apache-flex - 如何根据多列对 flex 数据网格进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/85974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com