在Flex中使用动态列渲染数据网格

时间:2011-07-17 17:42:46

标签: java flex actionscript-3 user-interface ria

我有一个显示产品详细信息的数据网格。对于特定产品,我需要显示其Id当前状态(可用/不可用)以及它属于哪个类别。类别部分与它看起来有点不同。

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

enter image description here

类别列从数据库中检索并作为参数传递,以在Datagrid中动态构造列。

我在UI上定义了以下Datastructure来处理这个问题。

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

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

有关如何渲染此数据网格的任何指针都非常有用。

1 个答案:

答案 0 :(得分:2)

一般情况下,要解决您的问题,您需要创建另一个Datastructure:

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 Item Renderer。会有这样的事情:

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;
}