datagridevent idedited 속성...펌
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;
}
}