I have an AdvancedDataGrid that is being populated by customer data. Each customer has 3 monthly products(1, 3, 6), and also a passed
field specifying whether the customer qualifies for any of the monthly products.
Now the grid is sorting the customer data alphabetically, which is a good thing, but it isnt sorting the monthly products, not so good thing.
The dataProvider looks something like this. (I am grouping by Funder.)
{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"}
Then results that I get in the grid looks something like this
----------------------------------------
| Funder & Products | Product Passed |
----------------------------------------
| Customer1 开发者_JAVA百科 | |
| 6 Month | True |
| 3 Month | True |
| 1 Month | False |
| Customer2 | |
| 3 Month | False |
| 6 Month | False |
| 1 Month | False |
----------------------------------------
Any help on getting the products sorted as well?
EDIT:
Here is the code I use for the grid
<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 & Products"/>
<mx:AdvancedDataGridColumn dataField="Passed"
headerText="Product Passed"/>
<mx:AdvancedDataGridColumn dataField="Passed"
headerText="Product Failed"/>
</mx:columns>
</mx:AdvancedDataGrid>
Okay, so I found a solution that works for me. Here follows.
Basically, on creationComplete
I call the sortData
function that does the following.
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
}
Hope to see another way of doing this, as I cant think that this is the only way of doing it
For all intents and purposes, a Grid doesn't sort data. It just displays the data you provide it in the order you specified. The dataProvider must be sorted by you and the grid will update accordingly.
If you're sorting by clicking on column headers, then take a look at the sortCompareFunction on the AdvancedDataGridColumn
If you're using an ArrayCollection or XMLListCollection, then take a look at this documentation on how to sort it.
Had exactly the same problem and found the solution on Adobe's website:
How to sort items within group in AdvancedDataGrid
You can write a compare function and use it on the grouping field.
精彩评论