Вопрос сортировки столбцов AdvancedDataGrid - PullRequest
0 голосов
/ 13 ноября 2010

Я использую mx: advanceddatagrid, и у меня возникла проблема с групповой сортировкой столбцов.Вот скриншот того, как выглядит моя сетка: http://i.stack.imgur.com/waAi7.png

У меня есть следующие данные:

PRODUCT_ID PROD_NAME ТИП КАТЕГОРИИ Подтип SubType_descr

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.Я вручную перемещаю его в GroupingCollection2, когда установщик запускает событие Binding;

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;
            }

вся помощь очень ценится.

1 Ответ

0 голосов
/ 15 ноября 2010

Ответ на этот вопрос был очень прост, но документация 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);
                    }

Коллега (спасибо Самитту) помогла мне разобраться в этом.Просто добавьте gc.descending, и группировка будет отсортирована по сгруппированному столбцу.

...