1

我正在尝试在 Flex 3 中创建一个动态数据网格,我有一个列列表,一个对象列表,这些对象对应于我从 url 获取的那些列的数据点。虽然网格工作得很好,但问题是对列的排序是按词汇顺序完成的。

我知道这可以通过向列添加 sortcomparefunction 来解决,这对于这种情况来说并不容易。我试过做

            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];`

但问题是,我在这里创建的函数对象在每次迭代中都会被覆盖(当我添加列时),最终所有列将仅在添加的最后一列上完成排序。

请提出建议。

4

1 回答 1

2

假设您有一些要从中创建数据网格列的对象的 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;
    }
}

感谢汤姆的评论。

于 2010-10-19T12:06:49.260 回答