我正在尝试在FLEX中创建数据网格。麻烦的是我希望它是100%动态的 - 即列和&数据
基本上我需要通过数据库查询的结果集填充数据网格,这些数据将通过标准的java spring jdbc dao层收集。该查询与'select * from tablename'一样通用,因此结果集可以从查询更改为查询。
我的计划是将这个结果集转换为某种形式的java对象,我最初的想法是某种类型的Map,它将包含一行的列名和值。
我苦苦挣扎的是我需要将此结果集转换为ActionScript对象(通过graniteds),然后我可以使用它来填充数据表。
我已经看到很多关于如何动态地将列添加到数据网格中的示例,并通过数据字段对象绑定数据 - 但是如果我不知道我将拥有多少列或者什么,我会坚持如何执行此操作列名将是。
希望这是有道理的。
由于
答案 0 :(得分:1)
如果您知道,如何动态创建列,那么是什么导致您被卡住?
从数据库中提取值。将结果转换为ArrayList<Map>
。然后在actionscript中它将映射到ArrayCollection(Object
)。由于集合中的每个对象都具有相同的结构(属性),因此您可以轻松创建datagrid:
public function resultEventHandler(event:ResultEvent) {
var res:ArrayCollection=event.result;
if (!res || res.length == 0)
return;
var dg:DataGrid=new DataGrid();
var typicalObj:Object=res.getItemAt(0);
var columns:Array=[];
//iterate through object properties
for (var prop:String in typicalObj) {
//set header text and dataField for new column
var c:DataGridColumn=new DataGridColumn(prop);
columns.push(c);
}
dg.columns=columns;
dg.dataProvider=res;
//add your datagrid on stage, do it as you need
view.addElement(dg);
}