컴퓨터관련

datagridevent idedited 속성...펌

맘편한넘 2011. 3. 27. 09:53

 
 private function itemFocusInHandler(event:DataGridEvent):void{
             // 선택된 칼럼의 에디터가 TextInput 이 아닐 경우는 해당 에디터를 커스텀화 하여 처리한다.
             // 에디터가 TextInput 이 아니면 처리 안함
             if(!(this.columns[event.columnIndex].itemEditor.generator is TextInput))
                 return;
             // isEdited 속성을 가지고 있지 않으면 처리 안함
             if(!event.itemRenderer.data.hasOwnProperty("isEdited"))
                 return;
                 
             if(event.itemRenderer is TextInput){
                 _originalData = TextInput(event.itemRenderer).text;
             }
         }
         
         private function itemFocusOutHandler(event:DataGridEvent):void{
             if(!(this.columns[event.columnIndex].itemEditor.generator is TextInput))
                 return;
                 
             if(!event.itemRenderer.data.hasOwnProperty("isEdited"))
                 return;
                 
             if(event.itemRenderer is TextInput){
                 if(_originalData != TextInput(event.itemRenderer).text){
                     event.itemRenderer.data.isEdited = true;
                 } else {
                     event.itemRenderer.data.isEdited = false;
                 }
             }
         }    
 
2. 더 나은 방식은 dataProvider 의 collectionChange 이벤트를 활용하는 것이다.


 - 데이터 그리드에 프로바이더가 설정될때 이벤트핸들러를 추가하고 이를 이용해서 처리한다. 
 - 소스는 다음과 같다. 


 
 override public function set dataProvider(value:Object):void{
             super.dataProvider = value;
             
             if(value is ArrayCollection){
                 ArrayCollection(value).addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeEventHandler);
             } else if(value is XMLListCollection){
                 XMLListCollection(value).addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeEventHandler);
             }
         }
         
         private function collectionChangeEventHandler(event:CollectionEvent):void{
             switch(event.kind){
                 case CollectionEventKind.UPDATE:
                     for each(var prop:PropertyChangeEvent in event.items){
                         if(prop.oldValue != prop.newValue && prop.source.hasOwnProperty("isEdited")){
                             prop.source.isEdited = true;
                         }
                     }
                     break;
             }
         }