虽然这听起来很简单,但我无法找到解决方案。 我有一个DataGrid,没有定义的列,但有一个ItemRenderer(在DataGrid本身)。 我希望datagrid在填充数据时使用此ItemRenderer。
<mx:DataGrid id="dataGrid" height="100%" width="100%" itemRenderer="my.renderer" />
通过查看DataGrid代码,它看起来应该只在预定义的列上。 我找到的唯一解决方法是在填充dataProvider(自动创建列)后分配itemRenderer
答案 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;
}