[英]Flex DataGrid: Programmatically Highlighting Rows
这看起来应该很简单,但是我什至找不到如何在Flex DataGrid中循环浏览行。
基本上,我要完成的工作是这样的伪代码:
for each(var row:Row in myDataGrid.Rows)
{
if(row.DataObject.Number == 1)
{
row.Color = Red;
}
}
我试图有一个“保存”按钮,在单击该按钮时要么处理保存,要么突出显示无效的行并弹出一条消息,告诉用户为什么行无效。 由于其他一些复杂性,我无法在输入每一行时对其进行验证。 任何帮助表示赞赏! 谢谢。
数据网格旨在由其数据驱动,而不是直接操纵。 完成您要尝试执行的操作的一种方法是在提供程序中的数据对象中添加某种属性(例如“有效”),并向呈现器添加代码以根据“有效”的状态更改其外观。 这样,您可以遍历数据提供程序中的对象,并根据验证检查设置“ valid”属性,这将导致数据网格中的行自动更改其外观。
希望能有所帮助。
尝试这样的事情:
for each(var o:Object in myDataGrid.dataProvider)
{
if(o.Number == 1) {
myDataGrid.selectedItems.push(o);
}
}
在您的mxml中,您可以将数据网格的selectionColor设置为红色。 参见: http : //blog.flexexamples.com/2008/02/19/setting-the-selection-color-and-selection-disabled-color-for-a-row-in-the-flex-datagrid-control/
让我知道这是否适合您!
我不确定是否可以在数据网格本身上执行此操作,但是如果每个项目都有一个项目渲染器,则可以在其中具有突出显示逻辑。
基本上,您定义了datagrid的项目渲染器类:
<mx:DataGrid itemRenderer="ItemRendererClass"(...) ></mx:DataGrid>
然后将类“ ItemRendererClass”定义为实现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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.