当labelFunction的结果发生变化时,如何让AdvancedDataGrid重新显示其标签?

时间:2010-03-31 21:50:56

标签: flex actionscript

我有一个带有自定义标签功能的AdvancedDataGrid,其值可以根据其他表单状态进行更改(具体来说,有一个下拉列表可以选择某些列的时间显示格式)。

现在,我有这个labelFunction:

internal function formatColumnTime(item: Object, column: AdvancedDataGridColumn): String {
    var seconds: Number = item[column.dataField];
    return timeFormat.selectedItem.labelFunction(seconds);
}

internal function formatTimeAsInterval(time: Number): String {
    if (isNaN(time))
        return "";

    var integerTime: int = Math.round(time);

    var seconds: int = integerTime % 60;
    integerTime = integerTime / 60;
    var minutes: int = integerTime % 60;
    var hours: int = integerTime / 60;

    return printf("%02d:%02d:%02d", hours, minutes, seconds);
}

internal function formatTimeAsFractions(time: Number): String {
    if (isNaN(time))
        return "";

    var hours: Number = time / 3600.0;
    return new String(Math.round(hours * 100) / 100);
}

...而timeFormat对象是一个组合框,其中的itemsFunction属性为formatTimeAsFractionsformatTimeAsInterval

具有时间格式的列具有formatColumnTime作为labelFunction值,因为提取该函数中的秒数并将其传递给为更可测试的应用程序(IMHO)制作的格式化程序。

因此,当timeFormat.selectedItem值发生变化时,我想强制我的网格重新计算这些列的标签。我必须采用什么方法? invalidateProperties()没有用,所以就这样了。

2 个答案:

答案 0 :(得分:0)

您是否尝试过刷新dataProvider?如果它是ArrayCollection,那应该有效。否则请尝试invalidateDisplayList().

答案 1 :(得分:0)

我已经走了直接使用组合框的selectedItem作为labelFunction的路线。它不是优雅可测试的,但它可以工作。