我使用的是mx:advanceddatagrid,我遇到了分组列排序的问题。我的网格的屏幕截图如下:http://i.stack.imgur.com/waAi7.png
我有以下类型的数据:
1 p_1 c1_y t1
t1_s1 sub_1*
t1_s2 sub_2*
t1_s4 sub_4*
t1_s5 sub_5*
2 p_2 c1_x t1
t1_s1 sub_1
t1_s2 sub_2
t1_s3 sub_3
3 p_3 c1_x t1
t1_s1 sub_1
t1_s2 sub_2*
t1_s3 sub_3*
现在,数据集的类型为arrayCollection。当setter触发绑定事件时,我手动将其移动到GroupingCollection2中;
protected function setGrouping(columnNames:Array):void{
_groupingColumns = [];
if (columnNames.length > 0) {
var _groupedData:GroupingCollection2 = new GroupingCollection2();
var _grouping:Grouping = new Grouping();
for (var i:int=0;i<columnNames.length;i++) {
var gc:GroupingField = new GroupingField(columnNames[i]);
_groupingColumns.push(gc);
}
_groupedData.source = _ds;
_grouping.fields = _groupingColumns;
_groupedData.grouping = _grouping
_groupedData.refresh();
_data = _groupedData;
} else {
_data = _ds;
}
setGridColumns();
}
虽然我在Product_Id上进行分组,但我通过labelFunction实现了上述外观,如下所示:
col.labelFunction = function (item:Object,column:AdvancedDataGridColumn):String {
if (item.hasOwnProperty('GroupLabel') && item.GroupLabel != null) {
if (item.children.length > 0) {
return item.children[0][column.dataField];
}
else {
return "";
}
}
else {
return "";
}
}
我从服务器收到的数据是下面显示的那种
PRODUCT_ID PROD_NAME CATEGORY TYPE SubType SubType_descr
-------------------------------------------------------------------
1 p_1 c1_y t1 t1_s1 sub_1*
2 p_2 c1_y t1 t1_s2 sub_2*
3 p_3 c1_y t1 t1_s3 sub_3*
-------------------------------------------------------------------
4 p_4 c1_x t1 t1_s1 sub_1*
5 p_5 c1_x t1 t1_s2 sub_2*
6 p_6 c1_x t1 t1_s3 sub_3*
简而言之,我将获取所有常用列值(Product,Category,Type)并将它们放在第一行中,子行中的所有更改值(sub_type,subtype_descr)
我想在Prod_Name,Category和type列上对这个网格进行排序,但是如果基础数据被排序,则像下面这样的声音不起作用。
public var _sort_direction:Boolean = false;
protected function adg1_headerReleaseHandler(event:AdvancedDataGridEvent):void
{
var sort:Sort = new Sort();
sort.fields = [new SortField(event.dataField, true, _sort_direction)];
_ds.sort = sort;
_ds.refresh();
if (DefaultGroupColumn != null && temp[0] != DefaultGroupColumn) {
temp.push(DefaultGroupColumn);
}
setGrouping(temp);
adg1.validateNow();
_sort_direction = !_sort_direction;
}
非常感谢所有帮助。
答案 0 :(得分:0)
对此的回答非常简单,但Adobe文档和其他一些博客让我陷入疯狂的追逐......
for (var i:int=0;i<columnNames.length;i++) {
var gc:GroupingField = new GroupingField(columnNames[i]);
gc.compareFunction = positionCompareFunction;
gc.descending = sort_dir;
_groupingColumns.push(gc);
}
一位同事(感谢Samitt)帮我解决了这个问题。只需添加gc.descending,分组就会对分组列进行排序。