2011-07-17 4 views
1

제품의 세부 정보를 표시하는 DataGrid가 있습니다. 특정 제품의 경우 Id 현재 상태 (사용 가능/사용 안함)와 해당 항목이 속한 범주를 표시해야합니다. 카테고리 부분은 마치 보이는 것처럼 조금 다릅니다.Flex의 동적 열을 사용하여 DataGrid 렌더링

제품 A는 범주 A, B 및 C에 속할 수 있으며 제품 B는 A, C 및 D 등의 범주에 속할 수 있습니다. 이 테이블의 구조는 범주 열이 데이터베이스에서 검색 및 DataGrid에 동적으로 열을 구성하는 매개 변수로 전달되는 것을

enter image description here

처럼 될 것입니다.

나는 이것을 처리하기 위해 UI에 다음 Datastructure를 정의했습니다.

Product{ 
var productId:String; 
var productName:String; 
var status:String; 
var categoryList:ArrayCollection; 
} 

이것이 내 문제를 해결할 수 있는지 확실하지 않습니다. 카테고리 이름이 포함 된지도가 있어야하고 해당 제품에 해당하는지도 알고 싶습니다.

이 DataGrid를 렌더링하는 방법에 대한 지침은 매우 유용 할 것입니다. 일반적인 경우에

답변

2

이 문제를 해결하기 위해, 넌 다른 자료 구조를 만들 필요가 : 당신의 DataGridColumn을 확장해야합니다 그 후

Category{ 
var id:Number; 
var name:String; 
} 

합니다. 그것에 "category"속성을 추가하십시오. 생성 열은 다음과 같이 될 것입니다 :

for each(var category:Categoty in categories){ 
var column:CategoryDataGridColumn = new CategoryDataGridColumn(); 
column.category = category; 
column.itemRenderer = CategoryItemRenderer; 
datagrid.columns.push(column); 
} 

CategoryItemRenderer 기본 데이터 그리드의 아이템 렌더러를 확장합니다. 다음과 같은 것을 갖습니다 :

override protected function commitProperties():void 
{ 
super.commitProperties(); 
if(_dataChanged) 
{ 
    _dataChanged = false; 
    text = getText(); 
} 
} 

private function getText():String 
{ 
var result:String = “Not Belongs” 
var columnCategory:Category = CategoryDataGridColumn(listData.owner.columns[listData.columnIndex]).category; 
for each(var category:Category in Product(data).categoriesList) 
{ 
    if(columnCategory.id == category.id) 
    { 
    result = “Belongs”; 
    break; 
    } 
} 
return result; 
} 
+0

고맙습니다. – Arun

관련 문제