Добавление функции сравнения в Dynamic Data Grid в flex - PullRequest
1 голос
/ 28 мая 2010

Я пытаюсь создать динамическую сетку данных в Flex 3, у меня есть список столбцов, список объектов, которые соответствуют точкам данных для тех столбцов, которые я получаю из URL. Хотя сетка работает отлично, проблема в том, что сортировка по столбцам выполняется в лексическом порядке.

Мне известно, что это можно исправить, добавив функцию sortcompare к столбцу, что в данном случае непросто. Я пытался сделать

            var dgc:DataGridColumn = new DataGridColumn(dtf);
            f1[dtf] = function(obj1:Object, obj2:Object):int {
               return Comparators.sortNumeric(obj1[dtf],obj2[dtf]);
            };
            dgc.sortCompareFunction = f1[dtf];`

Но проблема в том, что создаваемый здесь объект функции перезаписывается на каждой итерации (так как я добавляю столбцы), и в конечном итоге сортировка всех столбцов будет выполняться только по последнему добавленному столбцу.

Предложения, пожалуйста.

1 Ответ

2 голосов
/ 19 октября 2010

Предположим, у вас есть массив dynamicColumns некоторых объектов, из которого вы хотите создать столбцы таблицы данных.

var columns:Array = new Array();    
for (var i:int = 0; i < dynamicColumns.length; i++) {
    var column:DataGridColumn = new DataGridColumn(dynamicColumns[i].label);

    var dataGridColumnSortingHelper:DataGridColumnSortingHelper = new DataGridColumnSortingHelper(column);
    column.sortCompareFunction = dataGridColumnSortingHelper.columnSortCompareFunction;
    columns.push(column);
}
yourDataGrid.columns = columns;

Где DataGridColumnSortingHelper похож на это:

public class DataGridColumnSortingHelper
{
    private var column:DataGridColumn;

    // Constructor
    public function DataGridColumnSortingHelper(column:DataGridColumn)
    {
        this.column = column;
    }

    // Public Methods
    public function columnSortCompareFunction(item1:Object, item2:Object):int
    {
        // define your custom function here and use column field to know what column you sorting by...

        return 0;
    }
}

Спасибо Тому за комментарий.

...