PDA

Просмотр полной версии : DataGrid и itemRenderer


MisterX
01.11.2007, 17:59
Вопрос подниму ...и выложу исходни к не в архиве. ..
есть простой ХМЛ

<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
НО прогрессбар не соотвествует даным в таблице, тоесть даным которые пришли из ХМЛ
А что там? Как тебе помочь? Опиши все нормальным русским языком - тогда глядишь все всё поймут и проблема решится.