Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   вопрос по AdvancedDataGrid, dataProvider и itemRenderer (http://www.flasher.ru/forum/showthread.php?t=135334)

don_Lino 21.01.2010 05:54

вопрос по AdvancedDataGrid, dataProvider и itemRenderer
 
Нужно что бы в столбце Task и Worker были данные из SimpleFlatData.as, а к adcg1:AdvancedDataGridColumnGroup применить itemRenderer который зарисовывать к-во ячеек данной группы, беря значение к-ва (Duration) в SimpleFlatData.as
Подскажите как это можно реализовать?
trainingProject.mxml :
Код AS3:

?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()">
<mx:Script>
        <![CDATA[
                import mx.controls.Button;
                import mx.controls.AdvancedDataGrid;
                import MyGrpdDG;
 
        private function init():void
        {
                var my_GrpdDG: MyGrpdDG = new MyGrpdDG();
                var myDG: AdvancedDataGrid = new AdvancedDataGrid();
                myDG = my_GrpdDG.createDG();
                addChild(myDG);
        }
        ]]>
</mx:Script>
</mx:Application>

SimpleFlatData.as :
Код AS1/AS2:

[Bindable]
private var dpFlat:ArrayCollection = new ArrayCollection([
  {Task:"Task 1", Worker:"Worker 1", Duaration:2},
  {Task:"Task 2", Worker:"Worker 2", Duaration:4}
  {Task:"Task 3", Worker:"Worker 3", Duaration:4}
  {Task:"Task 4", Worker:"Worker 1", Duaration:1}
  {Task:"Task 5", Worker:"Worker 2", Duaration:3},
  {Task:"Task 6", Worker:"Worker 3", Duaration:2}
  {Task:"Task 7", Worker:"Worker 1", Duaration:5},
  {Task:"Task 8", Worker:"Worker 2", Duaration:4}
  {Task:"Task 9", Worker:"Worker 3", Duaration:4},
  {Task:"Task 10", Worker:"Worker 2", Duaration:3}
]);

и MyGrpdDG.as :
Код AS1/AS2:

package
{
        import mx.collections.*;
        import mx.controls.*;
        import mx.controls.advancedDataGridClasses.*;
        import mx.core.UIComponent;
        import mx.collections.ArrayCollection;
        include "SimpleFlatData.as";
 
        public class MyGrpdDG extends UIComponent
        {
                public function MyGrpdDG():void
                {
                }
 
                public function createDG():AdvancedDataGrid
                {
                        var ac:ArrayCollection;
                        var gc:GroupingCollection;
                        var ad:AdvancedDataGrid;
 
                        gc = new GroupingCollection();
                        gc.source = ac;
 
                        var grouping:Grouping = new Grouping();
                        grouping.fields = new Array(new GroupingField("Date"));
                        gc.grouping = grouping;
 
                        var column1:AdvancedDataGridColumn = new AdvancedDataGridColumn("Задача");
                        column1.dataField = "Task";
                        var column2:AdvancedDataGridColumn = new AdvancedDataGridColumn("Сотрудник");
                        column2.dataField = "Worker";
 
                        var adcg1:AdvancedDataGridColumnGroup = new AdvancedDataGridColumnGroup("Время");
                        adcg1.dataField = "Time";
                        var i:int;
                        var columnD:AdvancedDataGridColumn = new AdvancedDataGridColumn("");
                        for ( i = 0; i < 23; i++)
                        {
                                        columnD = new AdvancedDataGridColumn(i+"");
                                        columnD.width = 25;
                                        columnD.sortable = false;
                                        adcg1.children.push(columnD);
                        }
 
                        ad = new AdvancedDataGrid();
                        ad.groupedColumns = new Array(column1, column2, adcg1);
                        return(ad);
                }
 
        }
}


BeDLiNt 21.01.2010 11:53

Не понятно что вы хотите получить.

don_Lino 21.01.2010 14:03

Цитата:

Сообщение от BeDLiNt (Сообщение 880823)
Не понятно что вы хотите получить.

Не занаю как в данном случае применить dataProvider что бы в ячеках отображалось содержимое. И каким образом привязять itemRenderer к группе столбцов adcg1.

BeDLiNt 21.01.2010 14:32

То что вы не знаете как сделать я понял. А что вы хотите чтобы отображалось в массе этих столбцов? Данных для них всего одно как я понял(это Duaration), а ячеек 23 штуки. Вы хотите чтобы количество закрашенных ячеек было равным Duaration? Или как?

don_Lino 21.01.2010 17:01

Цитата:

Сообщение от BeDLiNt (Сообщение 880885)
То что вы не знаете как сделать я понял. А что вы хотите чтобы отображалось в массе этих столбцов? Данных для них всего одно как я понял(это Duaration), а ячеек 23 штуки. Вы хотите чтобы количество закрашенных ячеек было равным Duaration? Или как?

Совершенно верно! Но и еще есть первые два столбца Task и Worker, в которых тоже должны быть внесены данные.
Вопрос может и глупый, но я только изучаю flex. Есть свойства dataProvider и itemRenderer, но как правильно сделать что бы это все работало, так как пытался ничего не работало =(

BeDLiNt 21.01.2010 17:38

Вот так:

MyGrpdDG.as :
Код AS3:

package
{
        import mx.collections.*;
        import mx.controls.*;
        import mx.controls.advancedDataGridClasses.*;
        import mx.core.ClassFactory;
        import mx.core.UIComponent;
 
        include "SimpleFlatData.as";
 
        public class MyGrpdDG extends UIComponent
        {
                public function MyGrpdDG():void
                {
                }
 
                public function createDG():AdvancedDataGrid
                {
                        var ac:ArrayCollection;
                        var gc:GroupingCollection;
                        var ad:AdvancedDataGrid;
 
                        gc = new GroupingCollection();
                        gc.source = ac;
 
                        var grouping:Grouping = new Grouping();
                        grouping.fields = new Array(new GroupingField("Date"));
                        gc.grouping = grouping;
 
                        var column1:AdvancedDataGridColumn = new AdvancedDataGridColumn("Задача");
                        column1.dataField = "Task";
 
 
                        var column2:AdvancedDataGridColumn = new AdvancedDataGridColumn("Сотрудник");
                        column2.dataField = "Worker";
 
                        var adcg1:AdvancedDataGridColumnGroup = new AdvancedDataGridColumnGroup("Время");
                        adcg1.dataField = "Duaration";
                        var i:int;
                        var columnD:AdvancedDataGridColumn = new AdvancedDataGridColumn("");
 
                        for ( i = 0; i < 23; i++)
                        {
                                columnD = new AdvancedDataGridColumn(i+"");
                                columnD.itemRenderer = new ClassFactory(DurationItemRenderer);
                                columnD.width = 25;
                                columnD.sortable = false;
                                adcg1.children.push(columnD);
                        }
 
                        ad = new AdvancedDataGrid();
                        ad.groupedColumns = new Array(column1, column2, adcg1);
                        return(ad);
                }
 
        }
}

DurationItemRenderer.as :
Код AS3:

package {
 
        import mx.controls.Label;
        import mx.controls.dataGridClasses.*;
        import mx.controls.listClasses.IListItemRenderer;
        import mx.core.IFactory;
 
        public class DurationItemRenderer extends Label implements IFactory, IListItemRenderer {
 
                public function DurationItemRenderer(){
                        super();
                }
 
                public function newInstance():*{
                        return new DurationItemRenderer();
                }
 
                override public function set data(value:Object):void
                {
                        if(value != null)
                        {
                                //super.data = value;
                                if(DataGridListData(listData).dataField < value.Duaration)
                                        this.opaqueBackground = 0xFF0000;
                                else
                                        this.opaqueBackground = 0x000000;
                        }
                }
        }
 
}


don_Lino 21.01.2010 17:49

Огромнейшее спасибо!! =)


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

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