invalidateList and validateNow

    

    调用DataGrid的InvalidateList和validateNow两个方法来实现动态的刷新视图。如果你使用了数据源绑定操作的话一般来说DataGrid会自动的帮你去更新视图,具体的应该也会去调用这两个方法。所以遇到DataGrid视图方面的问题可以通过这两个方法来试试。

    invalidateList()这个函数用来刷新 DataGrid 的每一行,validateNow()这个是在 DataGrid 的属性(大小,位置等)改变时,进行手动刷新的。我们要刷新纪录,就要用 invalidateList() 。

    for <s:DataGrid/>  ,没有invalidateList(),用invalidateTypicalItem()取而代之;

1、invalidateList例子

<?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:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<s:layout>
		<s:HorizontalLayout/>
	</s:layout>
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			//绑定表格用的数据	
			[Bindable]
			private var arr1:ArrayCollection = new ArrayCollection([
				{neName:"教工路文一路路口相机_4", neType:"相机" , neAlarmType:"设备告警" , removeStatus:"未清除" , confirmStatus:"未确认" , neAlarmGrade:"2级"},
				{neName:"学院路文一路路口相机_3", neType:"相机" , neAlarmType:"环境告警" , removeStatus:"未清除" , confirmStatus:"未确认" , neAlarmGrade:"3级"},
				{neName:"文一路莫干山路路口相机_1", neType:"相机" , neAlarmType:"连接通信告警" , removeStatus:"未清除" , confirmStatus:"未确认" , neAlarmGrade:"1级"},
				{neName:"文一路莫干山路路口相机_3", neType:"相机" ,  neAlarmType:"性能告警" , removeStatus:"未清除" , confirmStatus:"未确认" , neAlarmGrade:"4级"}
			]);	
			[Bindable]
			private var arr2:ArrayCollection = new ArrayCollection([
				{neName:"教工路文一路路口相机_4", neType:"相机" , neAlarmType:"设备告警" , removeStatus:"未清除" , confirmStatus:"未确认" , neAlarmGrade:"2级"},
				{neName:"学院路文一路路口相机_3", neType:"相机" , neAlarmType:"环境告警" , removeStatus:"未清除" , confirmStatus:"未确认" , neAlarmGrade:"3级"},
				{neName:"文一路莫干山路路口相机_1", neType:"相机" , neAlarmType:"连接通信告警" , removeStatus:"未清除" , confirmStatus:"未确认" , neAlarmGrade:"1级"},
				{neName:"文一路莫干山路路口相机_3", neType:"相机" ,  neAlarmType:"性能告警" , removeStatus:"未清除" , confirmStatus:"未确认" , neAlarmGrade:"4级"}
			]);	
			
			//删除告警信息
			public function deleteAlarmRecord1():void{
				arr1.removeItemAt(alarmGrid1.selectedIndex);
			}
			//确认告警信息
			public function confirmAlarmInfo1():void{
				arr1.getItemAt(alarmGrid1.selectedIndex).confirmStatus = "已确认";
				alarmGrid1.invalidateTypicalItem();
			}
			//删除告警信息
			public function deleteAlarmRecord2():void{
				arr2.removeItemAt(alarmGrid2.selectedIndex);
			}
			//确认告警信息
			public function confirmAlarmInfo2():void{
				arr2.getItemAt(alarmGrid2.selectedIndex).confirmStatus = "已确认";
				alarmGrid2.invalidateList();
			}
		]]>
	</fx:Script>
	
	<s:DataGrid id="alarmGrid1" width="600" height="285" requestedRowCount="4" dataProvider="{arr1}">
		<s:columns>
			<s:ArrayList>
				<s:GridColumn dataField="neName" headerText="名称"></s:GridColumn>
				<s:GridColumn dataField="neType" headerText="类型"></s:GridColumn>
				<s:GridColumn dataField="removeStatus" headerText="清除状态"></s:GridColumn>
				<s:GridColumn dataField="confirmStatus" headerText="确认状态"></s:GridColumn>
				<s:GridColumn headerText="操作">
					<s:itemRenderer>
						<fx:Component>
							<s:GridItemRenderer>
								<s:HGroup> 
									<mx:LinkButton toolTip="清除" label="清除" click="outerDocument.deleteAlarmRecord1();" textDecoration="underline" color="#2066CF" fontWeight="normal"/> 
									<mx:LinkButton toolTip="确认" label="确认" click="outerDocument.confirmAlarmInfo1()" textDecoration="underline" color="#2066CF" fontWeight="normal"/> 
								</s:HGroup>
							</s:GridItemRenderer>
						</fx:Component>
					</s:itemRenderer>
				</s:GridColumn>
			</s:ArrayList>
		</s:columns>
	</s:DataGrid>
	<mx:DataGrid id="alarmGrid2" width="600" height="285" dataProvider="{arr2}">
		<mx:columns>
			<mx:DataGridColumn dataField="neName" headerText="名称"/>
			<mx:DataGridColumn dataField="neType" headerText="类型"/>
			<mx:DataGridColumn dataField="removeStatus" headerText="清除状态"/>
			<mx:DataGridColumn dataField="confirmStatus" headerText="确认状态"/>
			<mx:DataGridColumn headerText="操作">
				<mx:itemRenderer>
					<fx:Component>
							<mx:HBox>
								<mx:LinkButton toolTip="清除" label="清除" click="outerDocument.deleteAlarmRecord2();" textDecoration="underline" color="#2066CF" fontWeight="normal"/> 
								<mx:LinkButton toolTip="确认" label="确认" click="outerDocument.confirmAlarmInfo2()" textDecoration="underline" color="#2066CF" fontWeight="normal"/> 
							</mx:HBox>
					</fx:Component>
				</mx:itemRenderer>
			</mx:DataGridColumn>
		</mx:columns>
	</mx:DataGrid>
	
</s:Application>

2、

dataGrid1.scroller.verticalScrollBar.value = dataGrid1.scroller.verticalScrollBar.maximum;
dataGrid2.verticalScrollPosition = dataGrid2.maxVerticalScrollPosition;

<?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"
			   creationComplete="init()">
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
		<s:ArrayCollection id="arrColl1" collectionChange="arrColl_collectionChange1(event);" />
		<s:ArrayCollection id="arrColl2" collectionChange="arrColl_collectionChange2(event);" />
	</fx:Declarations>
	<s:layout>
		<s:HorizontalLayout/>
	</s:layout>
	<fx:Script>
		<![CDATA[
			import mx.events.CollectionEvent;
			private var timer:Timer;
			
			private function init():void {
				timer = new Timer(500);
				timer.addEventListener(TimerEvent.TIMER, onTimer);
				timer.start();
			}
			
			private function onTimer(evt:TimerEvent):void {
				var now:String = new Date().toString();
				arrColl1.addItem({id:timer.currentCount, time:now});
				arrColl2.addItem({id:timer.currentCount, time:now});
			}
			
			private function arrColl_collectionChange1(evt:CollectionEvent):void {
				callLater(autoScrollDataGrid1);
			}
			private function arrColl_collectionChange2(evt:CollectionEvent):void {
				callLater(autoScrollDataGrid2);
			}
			
			private function autoScrollDataGrid1():void {
				if (dataGrid1) {
					dataGrid1.validateNow();
					dataGrid1.scroller.verticalScrollBar.value = dataGrid1.scroller.verticalScrollBar.maximum;
				}
			}
			private function autoScrollDataGrid2():void {
				if (dataGrid2) {
					dataGrid2.validateNow();
					dataGrid2.verticalScrollPosition = dataGrid2.maxVerticalScrollPosition;
				}
			}
		]]>
	</fx:Script>
	
	<s:DataGrid id="dataGrid1"
				 dataProvider="{arrColl1}"
				 verticalScrollPolicy="on"
				 width="200" requestedRowCount="15"
				 >
		<s:columns>
			<s:ArrayList>
				<s:GridColumn dataField="id" width="50"/>
				<s:GridColumn dataField="time"/>
			</s:ArrayList>
		</s:columns>
	</s:DataGrid>
	<mx:DataGrid id="dataGrid2"
				dataProvider="{arrColl2}"
				verticalScrollPolicy="on"
				width="200" rowCount="8">
		<mx:columns>
			<mx:DataGridColumn dataField="id" width="50" />
			<mx:DataGridColumn dataField="time" />
		</mx:columns>
	</mx:DataGrid>

</s:Application>




你可能感兴趣的:(invalidateList and validateNow)