Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   DataGrid и itemRenderer (http://www.flasher.ru/forum/showthread.php?t=103262)

MisterX 01.11.2007 17:59

DataGrid и itemRenderer
 
Вопрос подниму ...и выложу исходни к не в архиве. ..
есть простой ХМЛ
Код:

<monitor>
        <router>
                <status>on</status>
                <ip>10.170.0.11</ip>
                <ping>0.66</ping>
                <uptime>2d</uptime>
                <addr>Vovchinecka34234234234</addr>
                <CPU>2</CPU>
        </router>
        <router>
                <status>off</status>
                <ip>255.255.255.255</ip>
                <ping>0.66</ping>
                <uptime>2d</uptime>
                <addr>Vovchinecka3</addr>
                <CPU>30</CPU>
        </router>
        <router>
                <status>on</status>
                <ip>10.170.0.13</ip>
                <ping>0.66</ping>
                <uptime>2d</uptime>
                <addr>Vovchinecka234</addr>
                <CPU>50</CPU>
        </router>
</monitor>

Так вот если выводить его в таблице тоесть DataGrid то все отлично ...
но на последний столбец в таблице мне нужно вывести ProgressBar

Вот сам код

Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
                <![CDATA[
                       
                        public function refresh():void{
                                var loader:URLLoader = new URLLoader();
                                var request:URLRequest = new URLRequest("test.xml");
                                loader.load(request);
                                loader.addEventListener(Event.COMPLETE, refreshComplete);
                        }
                        public function refreshComplete(event:Event):void {
                                var dp: XMLList;
                            var loader:URLLoader = URLLoader(event.target);
                            dp = new XMLList(loader.data);
                                this.monitorList.dataProvider=new XML(dp).children();
                        }

                ]]>
        </mx:Script>
        <mx:DataGrid x="10" y="59" width="458" height="226" id="monitorList">
                <mx:columns>
                        <mx:DataGridColumn headerText="Status" dataField="status" width="50" textAlign="center"/>
                                <mx:DataGridColumn headerText="Addr" dataField="addr"/>
                                <mx:DataGridColumn headerText="ІР" dataField="ip" width="110"/>
                                <mx:DataGridColumn headerText="Uptime" dataField="uptime" width="150"/>
                                <mx:DataGridColumn headerText="TOP" dataField="CPU" itemRenderer="someRender" width="210"/>
                </mx:columns>
        </mx:DataGrid>
        <mx:Button x="10" y="293" label="Button" click="refresh()"/>
       
</mx:Application>


а тут код самого компонента... сам прогрес бар выкинул так как он сейчас именно играет маловажную роль

Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init1()">
        <mx:Script>
                <![CDATA[
                        private function init1():void{
                                trace("Render element --- "+this.data);
                        }
                ]]>
        </mx:Script>
</mx:Canvas>

так вот ... при клике на кнопку тоесть при чтении хмла ... в котором 3 елемента ...
компонент рендерится 4 раза тоесть первый елемент рендерится и в начале и в конце почемуто ... при повторном чтении ..компонент рендерится один раз ...


После первого раза
Код:

Render element --- <router>
  <status>on</status>
  <ip>10.170.0.11</ip>
  <ping>0.66</ping>
  <uptime>2d</uptime>
  <addr>Vovchinecka34234234234</addr>
  <CPU>2</CPU>
</router>
Render element --- <router>
  <status>off</status>
  <ip>255.255.255.255</ip>
  <ping>0.66</ping>
  <uptime>2d</uptime>
  <addr>Vovchinecka3</addr>
  <CPU>30</CPU>
</router>
Render element --- <router>
  <status>on</status>
  <ip>10.170.0.13</ip>
  <ping>0.66</ping>
  <uptime>2d</uptime>
  <addr>Vovchinecka234</addr>
  <CPU>50</CPU>
</router>
Render element --- <router>
  <status>on</status>
  <ip>10.170.0.11</ip>
  <ping>0.66</ping>
  <uptime>2d</uptime>
  <addr>Vovchinecka34234234234</addr>
  <CPU>2</CPU>
</router>

Второй раз ..
Код:

<router>
  <status>on</status>
  <ip>10.170.0.11</ip>
  <ping>0.66</ping>
  <uptime>2d</uptime>
  <addr>Vovchinecka34234234234</addr>
  <CPU>2</CPU>
</router>


ВОпрос ...что не так ... передавания ХМЛ в дата провайдер какими методами только не пробывал, все одно и тоже

librio 01.11.2007 18:46

Все нормально.
Более того, при вертикальном и горизонтальном скроллинге ты опять увидишь, что элемент пересоздается заново. Если сомневаешься - почитай исходники компонента грида - там все прекрасно видно и отписано в комментах к классам.

MisterX 01.11.2007 19:00

так мне нужно чтоб каждій раз все перерисовывалось ... тоесть у мню даные каждый раз могуь быть разные ...

меняем компонент, ставим ...
Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init1()">
        <mx:Script>
                <![CDATA[
                        private function init1():void{
                                trace("Render element --- "+this.data);
                                if(this.data.hasOwnProperty('CPU')){
                                        this.prgBar.setProgress(this.data.CPU,100);
                                }
                        }
                ]]>
        </mx:Script>
        <mx:ProgressBar mode="manual" labelPlacement="center" id="prgBar"/>
</mx:Canvas>


ТОгда даные в таблице будут нормальные но соответствие прогрессбара будет только при первом чтении ХМЛ, при втором ваще какаято хня получаеццо (*((

etc 01.11.2007 19:49

Жду в личку нормальное название темы.

librio 02.11.2007 20:00

Не понял до конца что ты имел ввиду, но попробую помочь :)
1. Назначаешь датапровайдер.
2. Периодически или в момент изменения данных (вобщем когда надо обновить данные для progressbar), изменяй значения в самом дата провайдере и делай рефреш. При этом данные в таблице должны обновиться.

MisterX 03.11.2007 01:01

Смари ... вызываю ф-ю refresh первый раз, вес нормально, даные в талице сответсвуют даным прогрем бара, когда вызываю ф-ю еще раз .. какбы даные получаю те же, от статического ХМЛ, НО прогрессбар не соотвествует даным в таблице, тоесть даным которые пришли из ХМЛ

librio 06.11.2007 16:21

Цитата:

Сообщение от MisterX
НО прогрессбар не соотвествует даным в таблице, тоесть даным которые пришли из ХМЛ

А что там? Как тебе помочь? Опиши все нормальным русским языком - тогда глядишь все всё поймут и проблема решится.


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

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