0

GridItemRendererコンテンツを検証した後に赤い境界線を表示するエラー状態で作成しましdata[column.dataField]た。スクロール以外はすべて機能します...一番上のアイテムがエラー状態にありdata[column.dataField]、一番上のセルにnullしかないため、他のすべてが正常であるとします。次に、バーを1行下にスクロールします。新しい行が表示されようとすると、オーバーライドされたgetCurrentRendererStateが呼び出され、nullかどうかを確認します。通常の状態に変更する必要がありますが、この時点ではdata[column.dataField]まだトップがあります。行の値は、検証を行った後data[column.dataField]でも、現在のセルに現在のデータが表示されている場合でもnullのままです...では、どうすれば現在のセルの値を取得できますか?

<fx:Script>
    <![CDATA[
        import custom_events.DataGridValidationEvent;
        private function creationComplete():void{
            owner.parent.parent.addEventListener(DataGridValidationEvent.VALIDATE,doValidation);
        }
        private function doValidation(e:DataGridValidationEvent):void{
            currentState=data[column.dataField]?"normal":"error";
        }
        override public function get label():String{
            return lblCell.text;
        }
        override public function set label(value:String):void{
            currentState=data?data[column.dataField]?"normal":"error":"normal"
            lblCell.text=value;
        }
        override protected function getCurrentRendererState():String{
            return data?data[column.dataField]?"normal":"error":"normal";
        }
    ]]>
</fx:Script>
<s:states>
    <s:State name="normal"/>
    <s:State name="error"/>
</s:states>
<s:Rect left="1" right="0" top="1" bottom="0" includeIn="error">
    <s:stroke>
        <s:SolidColorStroke color="0xFF001A" weight="1"/>
    </s:stroke>
</s:Rect>
<s:Label id="lblCell" width="100%" height="100%" verticalAlign="middle"
         paddingLeft="5" paddingRight="5" paddingTop="3" maxDisplayedLines="1"
         showTruncationTip="true"/>

4

1 に答える 1

1

データ変更イベントをリッスンし、そこで検証を行うと、それがすべてうまくいきました。

<fx:Script>
    <![CDATA[
        import custom_events.DataGridValidationEvent;
        private function creationComplete():void{
                owner.parent.parent.addEventListener(DataGridValidationEvent.VALIDATE,doValidation);
                addEventListener(FlexEvent.DATA_CHANGE,setState);
            }
            private function doValidation(e:DataGridValidationEvent):void{
                currentState=data[column.dataField]?"normal":"error";
            }
            private function setState(e:FlexEvent):void{
                currentState=data[column.dataField]?"normal":"error";
            }
            override public function get label():String{
                return lblCell.text;
            }
            override public function set label(value:String):void{
                currentState=data?data[column.dataField]?"normal":"error":"normal"
                lblCell.text=value;
            }
            override protected function getCurrentRendererState():String{
                return currentState;
            }
    ]]>
</fx:Script>
<s:states>
    <s:State name="normal"/>
    <s:State name="error"/>
</s:states>
<s:Rect left="1" right="0" top="1" bottom="0" includeIn="error">
    <s:stroke>
        <s:SolidColorStroke color="0xFF001A" weight="1"/>
    </s:stroke>
</s:Rect>
<s:Label id="lblCell" width="100%" height="100%" verticalAlign="middle"
         paddingLeft="5" paddingRight="5" paddingTop="3" maxDisplayedLines="1"
         showTruncationTip="true"/>
于 2013-02-08T00:08:59.903 に答える