【发布时间】:2009-08-27 19:15:55
【问题描述】:
使用 Flex 3.2,我有一个扩展 TitleWindow 的对象。在这个 TitleWindow 中,我有一个 AdvancedDataGrid。
在创建这个对象时,我传递给它 2 个列表,一个包含要显示的数据,另一个传递一个列定义数组。这使我能够在运行时创建正确的列并为每列定义正确的显示属性(例如,布尔值将显示为复选框,日期以特定格式格式化(来自各种 STRING 可能出现空值的格式)
问题在于,基于字符串的默认排序在 100% 的情况下无法正常工作,即使格式是一种可以很好排序的格式,当涉及空值时它也会失败。
使用 sortCompareFunction 可以轻松解决上述问题,但事实上,当您设置列的 sortCompareFunction 时,似乎需要您将列名硬编码到函数中。
有什么办法可以解决最后一个问题吗?
这里是我用来创建列的函数供参考:
private function setupGrid():void
{
var localcols:Array = new Array();
datagrid1.columns = new Array();
var gcol:AdvancedDataGridColumn = new AdvancedDataGridColumn();
gcol.headerText = "Group";
gcol.dataField="GroupLabel";
localcols.push(gcol);
for each (var s:Object in DGColumns)
{
var col:AdvancedDataGridColumn = new AdvancedDataGridColumn();
col.headerText = s.Header;
col.dataField=s.Column;
col.headerWordWrap = true;
//col.sortable = false;
try
{
switch (s.type)
{
case "boolean":
col.labelFunction = boolCellLabel;
break;
case "date":
col.labelFunction = dateCellLabel;
col.sortCompareFunction = dateCompare; // doesn't work, as the function requires the column name coded into it
// inline does not work because s.Column is still set to the last column in the grid at sort time
col.sortCompareFunction = function (obj1, obj2):int
{
var l:XML = obj1 as XML;
var r:XML = obj2 as XML;
var left:Date = new Date( l.elements(s.Column).valueOf() );
var right:Date = new Date( r.elements(s.Column).valueOf() );
if (left == null && right == null) return 0;
else if (left == null) return -1
else if (right == null) return 1
else if (left < right) return -1;
else if (left > right) return 1;
else return 0;
;
break;
case "string": // use defaults
default:
break;
}
}
catch (ex:Object)
{}
localcols.push(col);
}
datagrid1.columns = localcols;
}
对于列定义:
var DGColumns:Array = [{Header:"Lorem ipsum", Column: "lorem", type:"string"},
{Header:"dolor", Column: "dolor" , type:"string"},
{Header:"sit amet", Column: "sitAmet", type:"string"},
{Header:"consectetur", Column: "consecteturDate", type:"date"},
{Header:"adipiscing", Column: "adipiscingDate", type:"date"},
{Header:"elit", Column: "isElit" , type:"boolean"}
]
【问题讨论】:
标签: apache-flex flex3