我创建了一个错误状态的GridItemRenderer
,在验证data[column.dataField]
内容后显示红色边框线,除了滚动工作之外的所有内容......
让我们说顶级项目处于错误状态,其他一切都很好,因为data[column.dataField]
它只在顶部单元格中为空,然后我向下滚动一行,当新行即将显示时,我的重写getCurrentRendererState被调用,并检查它是否为空,它应该更改为正常状态,但这是事情,此时,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"/>
答案 0 :(得分: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"/>