我正在创建一个显示来自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;
}
}
答案 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);
根据我的经验,我发现排序非常快,但是你的记录集比我通常在内存中加载的时间略大一些。