如何在flex中创建动态数据网格

时间:2012-01-26 21:30:52

标签: java actionscript-3 flex dynamic datagrid

我正在尝试在FLEX中创建数据网格。麻烦的是我希望它是100%动态的 - 即列和&数据

基本上我需要通过数据库查询的结果集填充数据网格,这些数据将通过标准的java spring jdbc dao层收集。该查询与'select * from tablename'一样通用,因此结果集可以从查询更改为查询。

我的计划是将这个结果集转换为某种形式的java对象,我最初的想法是某种类型的Map,它将包含一行的列名和值。

我苦苦挣扎的是我需要将此结果集转换为ActionScript对象(通过graniteds),然后我可以使用它来填充数据表。

我已经看到很多关于如何动态地将列添加到数据网格中的示例,并通过数据字段对象绑定数据 - 但是如果我不知道我将拥有多少列或者什么,我会坚持如何执行此操作列名将是。

希望这是有道理的。

由于

1 个答案:

答案 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);
}