Flex DataGrid:以编程方式突出显示行

时间:2011-02-11 16:22:59

标签: flex validation actionscript datagrid

这似乎很简单,但我甚至无法找到如何遍历Flex DataGrid中的行。

基本上我想要完成的是像这样的伪代码:

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

我正在尝试使用“保存”按钮,在单击时会处理保存,或突出显示无效行并弹出一条消息,告诉用户行无效的原因。由于其他一些复杂性,我无法在输入时验证每一行。任何帮助表示赞赏!感谢。

4 个答案:

答案 0 :(得分:2)

数据网格旨在由其数据驱动而不是直接操作。完成您尝试执行的操作的一种方法是向提供程序中的数据对象添加某种属性(例如“有效”),并将代码添加到渲染器以根据“有效”状态更改其外观。通过这种方式,您可以遍历数据提供程序中的对象,并根据验证检查设置“有效”属性,这将导致数据网格中的行自动更改其外观。

希望有所帮助。

答案 1 :(得分:1)

尝试这样的事情:

for each(var o:Object in myDataGrid.dataProvider)
{
    if(o.Number == 1) {
        myDataGrid.selectedItems.push(o);
    }
}

在mxml中,您可以将datagrid的selectionColor设置为红色。请参阅:http://blog.flexexamples.com/2008/02/19/setting-the-selection-color-and-selection-disabled-color-for-a-row-in-the-flex-datagrid-control/

请告诉我这是否适合您!

答案 2 :(得分:1)

我不确定您是否可以在数据网格本身上执行此操作,但如果您有每个项目的项目渲染器,则可以在那里使用突出显示逻辑。

基本上,您定义了datagrid的项目渲染器类:
<mx:DataGrid itemRenderer="ItemRendererClass"(...) ></mx:DataGrid>

然后将类“ItemRendererClass”定义为实现IDataRenderer:

implements="mx.core.IDataRenderer"

这是一个简单的解释,假设你可以弄清楚如何对自己这样做:)

答案 3 :(得分:1)

我通过覆盖设定数据来实现这一目标。我在下面提供了示例代码。

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();
    }