1

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

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

有什么方法可以访问排序函数中的列字段标签?

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;
    }
}

4

2 回答 2

1

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

于 2010-08-18T21:06:25.130 回答
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);

根据我的经验,我发现排序非常快,但是您的记录集比我通常一次加载到内存中的要大一些。

于 2010-08-18T20:29:48.273 回答