как создать динамическую сетку данных в flex - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь создать сетку данных в FLEX. Проблема в том, что я хочу, чтобы он был на 100% динамичным - то есть столбцы и данные.

В основном мне нужно заполнить сетку данных с помощью набора результатов из запроса к базе данных, эти данные будут собираться через стандартный слой java spring jdbc dao. Запрос такой же общий, как 'select * from tablename', поэтому набор результатов может меняться от запроса к запросу.

Мой план состоит в том, чтобы преобразовать этот результирующий набор в некую форму объекта Java, моя первоначальная мысль - это карта какого-то вида, которая будет содержать имя столбца и значения для строки.

Бит, с которым я борюсь, заключается в том, что мне нужно преобразовать этот результирующий набор в объект ActionScript (через гранититс), который затем я могу использовать для заполнения таблицы данных.

Я видел много примеров того, как динамически добавлять столбцы в сетку данных и связывать данные через объект поля данных - но я застрял в том, как мне это сделать, если я не знаю, сколько столбцов у меня будет или что имена столбцов будут.

надеюсь, что это имеет смысл.

Спасибо

1 Ответ

1 голос
/ 27 января 2012

Если вы знаете, как динамически создавать столбцы, то что вызывает застревание?
Извлечение значений из базы данных.Преобразовать результат в ArrayList<Map>.Затем в ActionScript он будет сопоставлен с ArrayCollection (из Object).Поскольку каждый объект в коллекции будет иметь одинаковую структуру (свойства), вы можете легко создать сетку данных:

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