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

2020年9月5日 17点热度 0条评论

我正在尝试在FLEX中创建一个数据网格。问题是我希望它是100%动态的-即列和数据。

基本上,我需要通过数据库查询的结果集填充datagrid,这些数据将通过标准的java spring jdbc dao层收集。该查询与“从表名中选择*”一样通用,因此结果集可以随查询的不同而变化。

我的计划是将此结果集转换为某种形式的java对象,我最初的想法是某种Map,其中将包含行的列名和值。

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

我已经看到了很多有关如何向datagrid中动态添加列,并通过datafield对象绑定数据的示例-但是,如果我不知道我将拥有多少列或列名是什么,我会陷入困境将会。

希望这是有道理的。

谢谢

解决方案如下:

如果您知道如何动态创建列,那么是什么导致您被卡住?
从数据库中提取值。将结果转换为ArrayList<Map>。然后在动作脚本中将其映射到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);
}