我正在寻找一种解决方案来对advancedDatagrid中的所有分组列进行排序。它应该与点击列标题相同。
请注意,我不是在寻找一种解决方案来对字段中的字段进行排序。有一个名为compareFunction的工作解决方案。
但是我无法按照“Einnahmen”栏目对照片中的两行进行排序。对不起德语单词。 你有好主意吗?
谢谢 弗兰克
答案 0 :(得分:4)
如果您希望使用已排序的列启动应用程序,则需要在创建/ dateprovider更新时模拟标题点击。
试试这个:
<mx:AdvancedDataGrid id="adg"
updateComplete="adg.dispatchEvent(new AdvancedDataGridEvent(AdvancedDataGridEvent.HEADER_RELEASE, false, true, 3, 'Einnahmen'))">
<mx:columns>
...
<mx:AdvancedDataGridColumn dataField="Einnahmen" sortDescending="true" />
</mx:columns>
</mx:AdvancedDataGrid>
我没有为分组集合试过这个,但让我知道它是如何工作的。
答案 1 :(得分:1)
修改强>
我不知道你是通过ActionScript构建dataProvider
。尽管如此,您仍然可以在集合中运行Sort
。
另一种选择是扩展AdvancedDataGrid
组件并覆盖set dataProvider
方法,以便在绑定数据后对其进行排序。这是Tree
控件的an example another developer provided(source),但AdvancedDataGrid
可能会使用相同的概念。
原始答案:
假设您只是尝试对顶级“Einnahmen”值进行排序(看起来就像是截图),我会在您从任何服务返回数据后手动对dataProvider
进行排序用来获取你的数据。
这是手动排序集合的一个非常基本的示例。
[Bindable] public var MyDataList:ArrayCollection;
private var einnahmenSortField:SortField = new SortField("Einnahmen", true, false);
private var theSort:Sort = new Sort();
// Called after data is returned from the remote service call to sort the data
public function SetMyDataList(returnedList:ArrayCollection):void
{
MyDataList = returnedList;
if (theSort == null)
{
theSort = new Sort();
theSort.fields = [einnahmenSortField];
}
MyDataList.sort = this.theSort;
MyDataList.refresh();
}
要将其转换为HierarchicalData
以便在AdvancedDataGrid
中使用,只需创建HierarchicalData
的新实例并将其分配给AdvancedDataGrid
,如下所示:
var hd:HierarchicalData = new HierarchicalData(myDataList);
hd.childrenField = "MyChildField";
myAdvancedDataGrid.dataProvider = hd;
答案 2 :(得分:0)
您是否尝试在AdvancedDataGrid标记中设置'sortExpertMode =“true”'?请在下面找到示例代码:
<mx:AdvancedDataGrid height="318"
id="dataSetsDG"
allowMultipleSelection="false"
folderClosedIcon="{null}"
folderOpenIcon="{null}"
defaultLeafIcon="{null}"
left="28"
top="162"
rowCount="11"
width="70%"
displayItemsExpanded="true"
sortExpertMode="true">
答案 3 :(得分:0)
我使用'HierarchicalData'作为AdvancedDataGrid的数据提供者。我还从ArrayCollection创建了HierarchialData,维护了排序顺序,它就像魅力一样。你可以尝试一下! 请查找Actionscript代码和示例屏幕截图。
public function createHierarchialResultVO(results:ArrayCollection):ArrayCollection
{
[ArrayElementType("ResultsVO")]
var dpHierrarchy:ArrayCollection = new ArrayCollection();
for each(var result:Result in results)
{
var resultVO:ResultsVO= new ResultsVO();
resultVO.resultName = result.resultName;
resultVO.runDate = result.runDate.toString();
resultVO.type="header";
var childrens:ArrayCollection = new ArrayCollection();
for each(var processDetails:ProcessDetails in result.details)
{
var children:ResultsVO= new ResultsVO();
children.files =result.fileCount;
children.status=result.status;
children.type="result";
}
resultVO.children =children;
dpHierrarchy.addItem(resultVO);
}
return dpHierrarchy;
}