Flex - 按行的标签对datagrid列进行排序

时间:2010-08-18 19:37:48

标签: flex flash actionscript-3 datagrid dataservice

我正在创建一个显示来自MySQL数据库的信息的表,我在整个地方使用外键来交叉引用数据。

基本上我有一个带有名为'system'的列的数据网格。系统是 int ,表示另一个表中对象的 id 。我使用 lableFunction 来交叉引用这两个并重命名该列。但是现在排序不起作用,我知道你必须创建一个自定义排序功能。我已经尝试过再次引用这两个表,但需要大约30秒来排序1200行。现在我对接下来应该尝试的事情一无所知。

有没有办法访问sort函数中的columns字段标签?

public function order(a:Object,b:Object):int
{
    var v1:String = a.sys;
    var v2:String = b.sys;
    if ( v1 < v2 ){
        trace(-1);
        return -1;
    }else if ( v1 > v2 ){
        trace(1);
        return 1;
    }else {
        trace(0);
        return 0;
    }
}

2 个答案:

答案 0 :(得分:1)

处理此问题的一种方法是浏览收到的对象,并根据交叉引用的ID将标签添加为每个属性。然后,您可以指定要在数据网格列中显示的label属性,而不是使用标签函数。这样你就可以按照你的期望进行排序,而不必创建自己的排序函数。

答案 1 :(得分:0)

DataGrids和其他基于列表的类的工作方式是使用itemRenderers。仅为屏幕上显示的数据创建渲染器。在大多数情况下,dataProvider中的数据远多于屏幕上显示的数据。

尝试根据dataGrid显示的内容对数据进行排序很可能无法为您提供所需的结果。

但是,没有理由不能在sortFunction中的数据对象上调用相同的标签函数。

一种方法是使用dataGrid的itemToLabel函数:

var v1:String = dataGrid.itemToLabel(a);
var v2:String = dataGrid.itemToLabel(b);

第二种方法是明确调用labelFunction:

var v1:String = labelFunction(a);
var v2:String = = labelFunction(b);

根据我的经验,我发现排序非常快,但是你的记录集比我通常在内存中加载的时间略大一些。