有没有办法为flex halo datagrid定义默认的itemrenderer

时间:2013-11-12 15:10:06

标签: flex datagrid itemrenderer

虽然这听起来很简单,但我无法找到解决方案。 我有一个DataGrid,没有定义的列,但有一个ItemRenderer(在DataGrid本身)。 我希望datagrid在填充数据时使用此ItemRenderer。

<mx:DataGrid id="dataGrid" height="100%" width="100%" itemRenderer="my.renderer" />

通过查看DataGrid代码,它看起来应该只在预定义的列上。 我找到的唯一解决方法是在填充dataProvider(自动创建列)后分配itemRenderer

2 个答案:

答案 0 :(得分:1)

在列上定义ItemRenderer;不在DataGrid上,所以我希望你的代码抛出编译器错误。

itemRenderer是一个属性,因此无法在DataGridColumn上使用CSS进行设置。

但是,MX DataGrid的样式名称defaultDataGridItemRenderer应传递给GridColumns。您应该能够在CSS中设置它并使用它来为每列定义默认的itemRenderer。

当你最终有一个dataProvider;您也可以在ActionScript中手动创建列,并在每个列上设置itemRenderer。

我在发现defaultDataGridItemRenderer样式之前的原始建议是说可以扩展DataGridColumn类以设置默认的itemRenderer值。但是,在您提供的代码示例中,您不是手动定义列;因此,您还必须扩展DataGrid才能使用自定义列类。

答案 1 :(得分:0)

itemRenderer属性是ListBase(DataGrid扩展ListBase)

如果你设置了DataGrid.itemRenderer =“mx.controls.TextInput”和你没有设置值的列,那么DataGrid将使用TextInput来创建项目渲染器和标题渲染器。

这是DataGrid中的源代码

public function createColumnItemRenderer(c:DataGridColumn, forHeader:Boolean, data:Object):IListItemRenderer
{
    var factory:IFactory;

    // get the factory for the data
    factory = c.getItemRendererFactory(forHeader, data);
    if (!factory)
    {
        if (!data)
            factory = nullItemRenderer;
        if (!factory)
            factory = itemRenderer;
    }