Shuhari

Flex技巧:以DataGrid显示矩阵数据

我们的系统需要实现这么一个功能,即以矩阵的形式显示用户权限分配的情况。最终的显示效果如下:



这个功能实现起来不是那么容易。当然,要为DataGrid动态添加列很简单:只要知道所有要添加的列,生成一堆DataGridColumn再放到一个数组里就好了。但问题是,DataGridColumn只能简单的指定一个itemRenderer,那么这个itemRenderer如何知道自己应该属于哪一列呢?

答案在于itemRenderer这个属性的类型。它不是一个简单的数据,而是一个要求实现了IFactory接口的对象。Flex中实现IFactory接口的基本类型是ClassFactory,ClassFactory有一个特殊属性properties,只要设置了它,就会在创建实例的时候自动附加到新实例中对应的属性值。

明白了这一点,问题就迎刃而解了。完整的实现代码如下:

Code


代码比较长,不过大部分只是简单的数据整理,重要的只有动态生成ClassFactory的部分:

var cf: ClassFactory = new ClassFactory(MatrixItemRenderer);
cf.properties 
= { dataField: col.dataField };
col.itemRenderer 
= cf;

以及itemRenderer中获取对应列的部分:

public override function set data(value: Object): void
{
    super.data 
= value;
    
if (dataField != null && dataField in value)
    {
        
var fieldValue: Boolean = Boolean(value[dataField]);
        _chk.selected 
= fieldValue;
    }
}

public 
var dataField: String;

posted on 2009-08-05 17:44  Shuhari  阅读(1293)  评论(1编辑  收藏  举报

导航