【问题标题】:Flex - sorting a datagrid column by the row's labelFlex - 按行标签对数据网格列进行排序
【发布时间】:2010-08-18 19:37:48
【问题描述】:

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

基本上,我有一个数据网格,其中有一列名为“系统”。该系统是一个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;
    }
}

【问题讨论】:

    标签: apache-flex flash actionscript-3 datagrid dataservice


    【解决方案1】:

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

    【讨论】:

    • 我认为这是我必须要做的。我试图将所有数据分开,但我认为这不会发生。我试试看。
    • 感谢您的洞察力,事情似乎很顺利。基本上,我将模型中的所有表分开(使用robotlegs),每当更新表时,它都会调用一个方法来将交叉引用字段添加到表行。我没有注意到太多(如果有的话)额外的滞后。再次感谢。
    【解决方案2】:

    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-09-10
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      相关资源
      最近更新 更多