2011-07-17 35 views
1

我有一个显示产品详细信息的数据网格。对于某一特定产品,我需要显示其Id状态(可用/不可用)以及它属于哪个类别。类别部分与它看起来有些不同。在Flex中使用动态列呈现数据网格

产品A可以属于类别A,B和C,而产品B属于A,c和D等等。该表的结构将类似于

enter image description here

类别列从数据库中检索,并作为参数动态构造DataGrid中列通过。

我已经在UI上定义了以下数据结构来处理这个问题。

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

我不确定这是否能解决我的问题。 我想我需要有一个包含类别名称的地图,如果它适用于该产品。

有关如何获取此数据网格的任何指针都会非常有用。

回答

2

在一般情况下,解决你的问题,你会需要创建另一个数据结构网络化:

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

之后,你将需要延长的DataGridColumn。给它添加“category”属性。 生成列将是这样的:

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

CategoryItemRenderer将扩大基本的DataGrid项目渲染器。将有这样的事情:

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