Flex의 DataGridColumn는 데이터를 매칭시킬때 dataField속성을 사용한다.
<mx:DataGrid id="contriesGrid" rowCount="25" dataProvider="{contries}" >
<mx:DataGridColumn width="150" headerText="국가" dataField="{contry}"/>
<mx:DataGridColumn width="150" headerText="지역" dataField="{region}"/>
</mx:DataGrid>
<mx:DataGridColumn width="150" headerText="국가" dataField="{contry}"/>
<mx:DataGridColumn width="150" headerText="지역" dataField="{region}"/>
</mx:DataGrid>
하지만 dataField는 맨 윗 계층의 데이터만을 조회할 수 있다. 가령 contry 객체 안에 name 이라는 프로퍼티가 있을 경우 vo 등의 객체를 이용하여 1차 계층으로 변환해주어야 한다. 이를 상속받아 변경해 주어야 한다고 생각만하고 실천에 옮기지 않고 있었는데, 이미 누군가 해 놓았더라. (역시!) 해서 출처와 함께 공개해 둔다.
DataGridColumnNested.as
package{
import mx.controls.dataGridClasses.DataGridColumn;
public class DataGridColumnNested extends DataGridColumn {
override public function itemToLabel(data:Object):String{
var currentData:Object = data;
if (data==null)
return “”;
if (dataField.indexOf(“.”) != -1){
var fields:Array = dataField.split(“.”);
try{
for each(var field:String in fields) {
currentData = currentData[field];
if (currentData==null)
break;
}
}catch(ipe:ItemPendingError){
ipe.addResponder(new ItemResponder(
function (result:Object, token:Object=null){
itemToLabel(result.body);
},
function (fault:Object, token:Object=null){
trace(‘Error while loading’);
}
));
}
}
return super.itemToLabel(currentData);
}
}
}
import mx.controls.dataGridClasses.DataGridColumn;
public class DataGridColumnNested extends DataGridColumn {
override public function itemToLabel(data:Object):String{
var currentData:Object = data;
if (data==null)
return “”;
if (dataField.indexOf(“.”) != -1){
var fields:Array = dataField.split(“.”);
try{
for each(var field:String in fields) {
currentData = currentData[field];
if (currentData==null)
break;
}
}catch(ipe:ItemPendingError){
ipe.addResponder(new ItemResponder(
function (result:Object, token:Object=null){
itemToLabel(result.body);
},
function (fault:Object, token:Object=null){
trace(‘Error while loading’);
}
));
}
}
return super.itemToLabel(currentData);
}
}
}
그리고 사용방법 예제
<mx:DataGrid id=“companyGrid” width=“800″ dataProvider=“{productArray}” editable=“true”>
<mx:columns>
<mx:DataGridColumn dataField=“id” headerText=“Id” editable=“false”/>
<mx:DataGridColumn dataField=“name” headerText=“Product”/>
<c:DataGridColumnNested editable=“false” headerText=“Company name” dataField=“company.name”/>
</mx:columns>
</mx:DataGrid>
<mx:columns>
<mx:DataGridColumn dataField=“id” headerText=“Id” editable=“false”/>
<mx:DataGridColumn dataField=“name” headerText=“Product”/>
<c:DataGridColumnNested editable=“false” headerText=“Company name” dataField=“company.name”/>
</mx:columns>
</mx:DataGrid>
출처 : Cornel Creanga – Nested properties and DataGridColumn
thx : cornel ^^
Recent Comments