Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Динамический Accordion и DataGrid (http://www.flasher.ru/forum/showthread.php?t=123672)

Anaza 07.04.2009 19:08

Динамический Accordion и DataGrid
 
Идея такая. Считывается с БД сколько существует групп и делается чтолько же вкладок accordion, а каждая вкладка заполняется dataGrid.

Проблема не могу корректно передать в dataGrid itemRender. Как это сделать.
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        pageTitle="Student"
        creationComplete="init()"
        xmlns:comp="components.*"
        width="416">
 
        <mx:Script>
                <![CDATA[
                        import valueObjects.Student;
                        import valueObjects.Group;
                        import mx.collections.ArrayCollection;
                        import mx.rpc.events.ResultEvent;
                        import mx.rpc.events.FaultEvent;
                        import mx.controls.Alert;
                        import mx.containers.VBox;
                        import mx.controls.DataGrid;
                        import mx.controls.dataGridClasses.DataGridColumn;
 
                        [Bindable]
                        public var stud:Student;
 
                        [Bindable]
                        public var group:Group;
 
                        [Bindable]
                        public var dataGr:DataGrid;
 
                        [Bindable]
                        public var groupData:ArrayCollection;
 
                        [Bindable]
                        public var studData:ArrayCollection;
 
                        private function init():void{
                                doGet.send();
                                getGroup.send();
                                stud = new Student();
                                group = new Group();       
                        }
 
                        private function resultHandler(event:ResultEvent):void{
                                studData = new ArrayCollection();
                                var studResultData:ArrayCollection = event.result.students.student;
                                var resultLength:Number = studResultData.length;
                                for (var i:Number = 0; i < resultLength; i++){
                                        var tempObject:Student1 = new Student1();
                                        tempObject.id = studResultData.getItemAt(i).partyId;
                                        tempObject.name = studResultData.getItemAt(i).firstName;                                       
                                        studData.addItem(tempObject);
                                }
                        }
 
                        private function resultGroupHandler(event:ResultEvent):void{
                                groupData = new ArrayCollection();
                                var groupResultData:ArrayCollection = event.result.groups.group;
                                var resultLength:Number = groupResultData.length;
                                for (var i:Number = 0; i < resultLength; i++){
                                        var tempObject:Group = new Group();
                                        tempObject.groupId = groupResultData.getItemAt(i).groupId;
                                        tempObject.courseName = groupResultData.getItemAt(i).courseName;
                                        groupData.addItem(tempObject);
 
//Создание элемента для accordian                                       
                                        var vbox:VBox = new VBox();
                                        vbox.label = tempObject.courseName;
                                        vbox.percentWidth = 416;
                                        vbox.percentHeight = 451;
 
//Создание dataGrid                   
                                        dataGr = new DataGrid();
                                        var dgcolumns:Array = new Array();
                                        var dgcolumn1:DataGridColumn = new DataGridColumn();
 
                                        dataGr.percentWidth = 416;
                                        dataGr.percentHeight = 451;
                                        dataGr.dataProvider = studData;
                                        dataGr.columns = dgcolumns;
 
//Необходимо чтоб dataGrid состоял из itemRenderer="components.EmployeeRenderer", таким образом оно не работает ((
                                        var employeeRenderer:ClassFactory = new ClassFactory(EmployeeRenderer);
                                        dgcolumn1.itemRenderer = employeeRenderer;
                                        dgcolumns.push(dgcolumn1)
 
                                        vbox.addChild(dataGr);
 
                                        accordion.addChild(vbox);
                                }
 
                        }
 
                        private function faultHandler(event:FaultEvent):void{
                                Alert.show("Where was a problem.","Error");
                        }
                ]]>
        </mx:Script>
 
          <mx:HTTPService id="doGet"
                  url="http://localhost:8080/bimportal/control/getFlexStudent" method="POST"
                result="resultHandler(event)"
                fault="faultHandler(event)"/>
 
        <mx:HTTPService id="getGroup"
                  url="http://localhost:8080/bimportal/control/getFlexGroup" method="POST"
                result="resultGroupHandler(event)"
                fault="faultHandler(event)"/>
 
        <mx:Accordion id="accordion" width="414" height="451">
        </mx:Accordion>
 
</mx:Application>


Tim SharK 08.04.2009 11:13

А как ты понимаешь, что есть проблема ?
Ошибка компиляции или отображается не то, что нужно ?
Было бы неплохо увидеть скриншот, если отображается не то, что нужно.

Добавлено через 10 минут
кстати, попробуй для начала сделать DataGrid с одним только столбцом и заполни его каким-нибудь статическим текстом. Так легче будет понять где ошибка!

Anaza 08.04.2009 11:49

Проблема в том, что данные не отображаются (или не отображаются как надо).

Если убрать вставку itemRenderer,

Код AS3:

dataGr.columns = dgcolumns;
 
var employeeRenderer:ClassFactory = new ClassFactory(EmployeeRenderer);
dgcolumn1.itemRenderer = employeeRenderer;
dgcolumn1.dataField = "groupId";
dgcolumns.push(dgcolumn1);

то получиться такой вид

[IMG]http://s58.***********/i159/0904/d7/4bc90f6cf1cbt.jpg[/IMG]

Если вставить его, то данные не отображаются совсем. А хотелось бы что б была на подобии

[IMG]http://s41.***********/i092/0904/2d/f64e3e70a7cbt.jpg[/IMG]

PS Если делаю даже одну колонку в гриде, то данные так же перестаю отображаться :(

Tim SharK 08.04.2009 11:53

на вотором изображении не datagrid, а List.
Кроме того List проще сделать.
Попробуй List сделать, вместо DataGrid.

Или нужно конкретно DataGrid из-за возможности видеть каждый параметр в своем столбце ?


кстати, не зная что значит для тебя правильное отображение данных в твоем DataGrid, тебе никто не сможет помочь. Объясни чем тебя не устраивает вид на первом скриншоте ?

Anaza 08.04.2009 12:24

Вид не устраивает тем что он не удобен для просмотра пользователем.

На второй картинке именно DataGrid

Код AS3:

        <mx:DataGrid id="employeeGrid" 
                dataProvider="{gridData}" x="22" y="20"
                itemClick="itemClickHandler(event)" height="465">
                        <mx:columns>
                                <mx:DataGridColumn itemRenderer="components.EmployeeRenderer"/>
                        </mx:columns>
                </mx:DataGrid>

Лист можно попробовать, но основная проблема при этом не исчезнет, а она в том, чтоб вставить <mx:DataGridColumn itemRenderer="components.EmployeeRenderer"/> в код из первого поста. Там немного по другому добавляются данные из-за того что приходится динамически создавать accordion.

GBee 08.04.2009 12:39

Проблема в EmployeeRenderer. Покажите?

Anaza 08.04.2009 13:02

Показать EmployeeRenderer я правильно поняла?

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
        horizontalAlign="absolute"
        initialize="init()"
        width="100%" height="96" verticalScrollPolicy="off">
 
        <mx:Script>
                <![CDATA[
                        import valueObjects.Student;
                        import flash.net.URLLoader;
                        import flash.net.URLRequest;
 
 
                        [Bindable]       
                        private var imagePath:String;       
 
                        private var loader:URLLoader;
 
                        private function init():void{
                                loader = new URLLoader();
                                loader.addEventListener(Event.COMPLETE, loaderHandler);
                                loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                        }
 
                        private function loaderHandler(success:String):void{
                                if (success){
                                        imagePath = "foto/" + data.image;
                                }
                        }
 
                        private function ioErrorHandler(event:IOErrorEvent):void{
                                imagePath = "foto/2400.jpg";
                        }                       
 
                        override public function set data(value:Object):void{
                                super.data = value;
                                var requestURL:URLRequest = new URLRequest("foto/" + data.image);
                                loader.load(requestURL);
                        }
                ]]>
        </mx:Script>
        <mx:Image
                source="{imagePath}" width="80"/>
        <mx:VBox horizontalScrollPolicy="off" height="96">
                <mx:Label text="{data.name} {data.fatherName} {data.surname}"  fontWeight="bold" fontSize="12"/>       
                <mx:Label text="Группа: {data.studGroup}"/>
                <mx:Label text="Email: {data.email}"/>     
                <mx:Label text="Тел: {data.mobile}"/>       
        </mx:VBox>
</mx:HBox>


GBee 08.04.2009 13:09

Вроде все ок, только картинку через одно место грузите, просто в сурс путь запихнуть не судьба?

Tim SharK 08.04.2009 13:11

Все-таки что значит "неудобен для просмотра пользователем" ? Размеры столбцов другие нужны ? Или их порядок ? :)

Anaza 08.04.2009 13:24

Цитата:

Сообщение от GBee (Сообщение 811758)
Вроде все ок, только картинку через одно место грузите, просто в сурс путь запихнуть не судьба?

тут типо хитро, если не найдена картинка, то ставится по умолчанию.
Или же и это можно сделать более легким способом, то скажите плизз как :)

Цитата:

Все-таки что значит "неудобен для просмотра пользователем" ? Размеры столбцов другие нужны ? Или их порядок ?
Количество (нужно выводить не все столбцы), порядок (сначал имя, фамилия и пр), размер соответственно и нужна ФОТКА. Хотя как говорила если добавлять текст с колонкой то данные перестают отображаться.

Мне хоть как то это отформатировать :wacko:


Часовой пояс GMT +4, время: 19:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.