1

いくつかのプロパティ (開始時間と終了時間) を割り当てる必要があるため、spark データグリッドの 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>

myItemRenderer

<?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 は同じままです。

4

1 に答える 1

0

次のコマンドを実行することで強制できるようです。

myDataGrid.columnHeaderGroup.layout.clearVirtualLayoutCache();

この行をDataGrid.assetcolumnsメソッドからコピーしました。

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

        dispatchChangeEvent("columnsChanged");
    }
}
于 2012-09-21T13:08:52.157 に答える