Apache flex FlexDataGrid:以编程方式高亮显示行

Apache flex FlexDataGrid:以编程方式高亮显示行,apache-flex,validation,actionscript,datagrid,Apache Flex,Validation,Actionscript,Datagrid,这看起来应该非常简单,但我甚至找不到如何在FlexDataGrid中循环行 基本上,我要完成的是类似以下伪代码的工作: for each(var row:Row in myDataGrid.Rows) { if(row.DataObject.Number == 1) { row.Color = Red; } } 我正在尝试创建一个保存按钮,单击该按钮后,它要么处理保存,要么突出显示无效行,并弹出一条消息,告诉用户行无效的原因。由于其他一些复杂性,我无法在

这看起来应该非常简单,但我甚至找不到如何在FlexDataGrid中循环行

基本上,我要完成的是类似以下伪代码的工作:

for each(var row:Row in myDataGrid.Rows)
{
    if(row.DataObject.Number == 1)
    {
        row.Color = Red;
    }
}

我正在尝试创建一个保存按钮,单击该按钮后,它要么处理保存,要么突出显示无效行,并弹出一条消息,告诉用户行无效的原因。由于其他一些复杂性,我无法在输入每一行时对其进行验证。感谢您的帮助!谢谢。

数据网格旨在由其数据驱动,而不是直接操纵。一种方法是向提供程序中的数据对象添加某种属性(例如valid),并向呈现程序添加代码,以根据valid的状态更改其外观。通过这种方式,您可以循环数据提供程序中的对象,并根据验证检查设置有效属性,这将导致数据网格中的行自动更改其外观


希望这能有所帮助。

尝试以下方法:

for each(var o:Object in myDataGrid.dataProvider)
{
    if(o.Number == 1) {
        myDataGrid.selectedItems.push(o);
    }
}
在mxml中,可以将数据网格的selectionColor设置为红色。见:


让我知道这是否适合你

我不确定您是否可以在数据网格本身上执行此操作,但是如果您为每个项目都有一个项目渲染器,那么您可以在那里使用高亮显示逻辑

基本上,您可以定义datagrid的项目呈现器类:

然后将类ItemRenderClass定义为实现IDataRenderer:

implements="mx.core.IDataRenderer"

这是一个过于简单的解释,假设您可以自己解决这个问题:

我通过覆盖集合数据实现了这一点。我在下面提供了示例代码

override public function set data(value:Object):void
    {
        super.data=value;
        if(value!=null && value.hasOwnProperty("state") && value.state == "Final State"){               
                setStyle("color", 0xb7babc);
        }else{
            setStyle("color", 0x000000);
        }
        this.selectable=false;
        super.invalidateDisplayList();
    }