Flex AdvancedDataGrid sort - PullRequest
       15

Flex AdvancedDataGrid sort

3 голосов
/ 15 июля 2010

У меня есть AdvancedDataGrid, который заполняется данными клиента. У каждого клиента есть 3 ежемесячных продукта (1, 3, 6), а также поле passed, указывающее, имеет ли клиент право на какой-либо из ежемесячных продуктов.

Теперь сетка сортирует данные о клиентах по алфавиту, что хорошо, но не сортирует ежемесячные продукты, а не так хорошо.

DataProvider выглядит примерно так. (Я группируюсь по Фундеру.)

{Funder:"Customer1", Product:"1 Month", Passed:"False"}, 
{Funder:"Customer1", Product:"3 Month", Passed:"True"}, 
{Funder:"Customer1", Product:"6 Month", Passed:"True"}, 
{Funder:"Customer2", Product:"1 Month", Passed:"False"}, 
{Funder:"Customer2", Product:"3 Month", Passed:"False"}, 
{Funder:"Customer2", Product:"6 Month", Passed:"False"}

Тогда результаты, которые я получаю в сетке, выглядят примерно так

 ----------------------------------------
| Funder & Products   |  Product Passed  |
 ----------------------------------------
| Customer1           |                  |
|    6 Month          |  True            |
|    3 Month          |  True            |
|    1 Month          |  False           |
| Customer2           |                  |
|    3 Month          |  False           |
|    6 Month          |  False           |
|    1 Month          |  False           |
 ----------------------------------------

Любая помощь в сортировке продуктов также?

EDIT:

Вот код, который я использую для сетки

<mx:AdvancedDataGrid id="myADG" 
                     width="100%" height="100%"
                     initialize="gc.refresh();"
                     folderClosedIcon="{null}"
                     folderOpenIcon="{null}"
                     defaultLeafIcon="{null}">

    <mx:dataProvider>
        <mx:GroupingCollection id="gc" source="{mCustomerData}">
            <mx:grouping>
                <mx:Grouping>
                    <mx:GroupingField name="Funder"/>
                </mx:Grouping>
            </mx:grouping>
        </mx:GroupingCollection>
    </mx:dataProvider>        

    <mx:columns>
        <mx:AdvancedDataGridColumn dataField="Product" 
                                   headerText="Funder &amp; Products"/>
        <mx:AdvancedDataGridColumn dataField="Passed"
                                   headerText="Product Passed"/>
        <mx:AdvancedDataGridColumn dataField="Passed"
                                   headerText="Product Failed"/>
    </mx:columns>
</mx:AdvancedDataGrid>

Ответы [ 3 ]

3 голосов
/ 15 июля 2010

Хорошо, поэтому я нашел решение, которое работает для меня.Вот что следует:

В основном, на creationComplete я вызываю функцию sortData, которая выполняет следующее.

private function sortData():void {
    var sort:Sort = new Sort();
    var sortField:SortField = new SortField("Product");

    sort.fields = [sortField];        // Set 'Product' as the field to be sorted on
    myADG.dataProvider.sort = sort;   // Add the sort to the dataProvider of the dataGrid
    gc.source.refresh();              // Refresh the GroupCollection
}

Надеюсь увидеть другой способ сделать это, так как не могу думать, чтоэто единственный способ сделать это

1 голос
/ 18 сентября 2012

У меня точно такая же проблема, и она нашла решение на сайте Adobe:

Как сортировать элементы в группе в AdvancedDataGrid

Вы можете написать функцию сравнения и использовать ее в поле группировки.

1 голос
/ 15 июля 2010

Для всех целей Grid не сортирует данные. Он просто отображает предоставленные вами данные в указанном вами порядке. DataProvider должен быть отсортирован вами, и сетка будет обновляться соответствующим образом.

Если вы сортируете, нажимая на заголовки столбцов, взгляните на sortCompareFunction в AdvancedDataGridColumn

Если вы используете ArrayCollection или XMLListCollection, взгляните на эту документацию о том, как ее отсортировать.

...