【问题标题】:Flex: Unable to set headerRenderer programmaticallyFlex:无法以编程方式设置 headerRenderer
【发布时间】:2012-08-09 08:23:18
【问题描述】:

我需要以编程方式为我的 spark 数据网格设置 headerRenderer,因为我需要为其分配一些属性(开始和结束时间)。此数据是从数据库中获取的,需要在加载后分配给此 headerrenderer。

虽然以编程方式设置我的 itemRenderer 没有问题,但我发现无法为 headerRenderer 做同样的事情。

这是一段简化的代码:

主要

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[           
            protected function button1_clickHandler(event:MouseEvent):void
            {
                customHeaderColumn.headerRenderer = new ClassFactory(myHeaderRenderer); 
                customHeaderColumn.itemRenderer = new ClassFactory(myItemRenderer);
            }

        ]]>
    </fx:Script>
    <s:layout>
        <s:VerticalLayout />
    </s:layout>
    <s:DataGrid width="100%">
        <s:dataProvider>
            <s:ArrayList>
                <fx:Object name="record"/>
            </s:ArrayList>
        </s:dataProvider>
        <s:columns>
            <s:ArrayList>
                <s:GridColumn id="customHeaderColumn" headerText="Column 1"/>
            </s:ArrayList>
        </s:columns>
    </s:DataGrid>
    <s:Button label="change" click="button1_clickHandler(event)"/>
</s:Application>

我的项目渲染器

<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">
    <s:Label top="9" left="7" text="item"/>
</s:GridItemRenderer>

myHeaderRenderer

<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">
    <s:Label top="9" left="7" text="header"/>
</s:GridItemRenderer>

单击按钮时,您可以看到 itemRenderer 发生变化,但是 headerRenderer 保持不变。

【问题讨论】:

  • 闻起来像虫子。如果你只想设置一些属性,你可以创建内联的头部渲染器(就像你对dataProvidercolumns属性所做的那样)并绑定属性。
  • @RIAstar 这似乎有效!没有解决问题,但解决了我的问题,谢谢!

标签: apache-flex dynamic datagrid renderer flex-spark


【解决方案1】:

看起来你可以通过执行来强制它:

myDataGrid.columnHeaderGroup.layout.clearVirtualLayoutCache();

我从 DataGrid.as set columns 方法中复制了这一行:

public function set columns(value:IList):void
{
    if (setGridProperty("columns", value))
    {
        if (columnHeaderGroup)
        {
            columnHeaderGroup.layout.clearVirtualLayoutCache();
            columnHeaderGroup.invalidateSize();
            columnHeaderGroup.invalidateDisplayList();
        }

        dispatchChangeEvent("columnsChanged");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多