我试图对一个DataGrid Flex组件进行排序,问题是,当我单击箭头对其进行排序时,似乎排序函数不仅对我单击的列进行排序,而且还对其他列进行排序。
为了更好地解释它,假设我的行和列如下所示:(null只是网格中的一个空空间)
debits_______信贷 10____________(null) (null)________11 12____________(null) (null)________13
现在,当我单击credits来排序时,就会发生这样的情况:
debits_______信贷 (null)__________13 12____________(null) (null__________11 10__________(null)
而不是:
debits_______信贷 (null)__________13 (null_____________11 12___________(null) 10__________(null)
我调试了它,比较函数接收的是4个值,10、11、12和13,而不是2、13和11。这让我想知道,为什么会发生这种情况?难道排序函数不应该只关心我正在排序的列,而不关心其余的列吗?
不管怎么说,结果糟透了。
发布于 2014-04-10 03:15:12
您可以自定义sortCompareFunction。
DataGridColumn将行的数据排序为字符串,如果要将其作为数字进行比较,则应定义sortCompareFunction
即:
public static function numericCompare(key:String):Function
{
return function(itemA:Object, itemB:Object):int
{
if (itemA == null && itemB == null)
return 0;
if (itemA == null)
return 1;
if (itemB == null)
return -1;
var emptyA:Boolean = StringUtil.isEmpty(itemA[key]);
var emptyB:Boolean = StringUtil.isEmpty(itemB[key]);
if (emptyA && emptyB)
return 0;
if (emptyA)
return 1;
if (emptyB)
return -1;
var num1:Number = Number(itemA[key]);
var num2:Number = Number(itemB[key]);
return mx.utils.ObjectUtil.numericCompare(num1, num2);
}
}发布于 2014-04-24 07:07:57
实际上,文档说:
注意: obj1和obj2参数是整个数据提供程序元素,而不仅仅是项的数据。
因此,这是正常和预期的。
您可能认为这是奇怪或复杂的,但是DataGrid中的许多特性使用其行的数据,而不仅仅是其列的数据。
如果它们只提供有关列(或数据字段)的信息,但您需要更多有关数据的信息,那么代码将变得非常脏和难闻。或者,您可能需要为此编写几十行代码。
看,就在昨天,也有人处于类似的情况:用itemEditor实现flex数据集的验证
(假设您必须对values字段进行排序。某些值需要根据其类型进行解析。)
它很方便,而且在现实世界中给你节省了很多。
https://stackoverflow.com/questions/22971016
复制相似问题