Показать сообщение отдельно
Старый 27.08.2009, 18:39
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 1  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
По умолчанию Проблема с компонентом Tree и ArrayCollection(

День добрый, пытаюсь вытащить из БД определенные столбцы (что вообщем то получается, использую недавноупомянутый драйвер asSQL) и сформировать из них новый ArrayCollection с целью скормить в роли дата провайдера для компонента Tree. С этим есть проблемы(( Переделываю из примера с датагридом. Пробую сделать так:
Код AS3:
	                  	// выбираем нужныенам столбцы 
var token:MySqlToken = st.executeQuery("SELECT userf, useri, usero FROM usrtab"); 
 
	                        token.addEventListener(MySqlEvent.COLUMNDATA, function(e:MySqlEvent):void {
		                    tempArr = new ArrayCollection();  // временная коллекция куда все складываем
 
	                     // grid.columns = ResultsUtil.getDataGridColumns( e.resultSet );
	                     // grid.dataProvider = users;
		                    });
 
	                    //listen for new rows
	                    token.addEventListener(MySqlEvent.ROWDATA, function(e:MySqlEvent):void {
	                         addNewRows(e.resultSet);
	                    });                             
 
	                    //add a responder
	                    token.addResponder(new AsyncResponder(
	                        function(data:Object, token:Object):void {
	                                //call add new rows again to ensure we have all the rows
	                                addNewRows(ResultSet(data));
	                        },
	                        function(info:Object, token:Object):void {
	                                Alert.show("Error: " + info);
	                        },
	                        token
	                    ));
	                }
 
	                private function addNewRows(rs:ResultSet):void {
	                    //get our data provider
	                    var dp:ArrayCollection = tempArr;//.dataProvider as ArrayCollection;
 
	                    var newRows:ArrayCollection = rs.getRows(false, dp.length, (rs.size()-dp.length));
		                    dp.source = dp.source.concat( newRows.source );
		                  //	dp.refresh();	
 
	                    if(++ll == (count))			// определяем что обошли все записи
	                    {
	                    	userArr = new ArrayCollection();
	                    	var total1:int = newRows.length; 						// определяем длинну подмассива
	                    	var total2:int = dp.length; 							// определяем длинну главной коллекции
	                    	for(var i:int = 0; i < total1; i++)
			{
				for(var j:int = 0; j < total2; j++)
				{
					newArr.getItemAt(i) += arrTotal.getItemAt(j).getItemAt(i) + ' ';	// получаем елемент1 + елемент2 + елемент3
				}
			}
			tree.dataProvider = newArr;			// в конце назначаем, как дата провайдер 
	                    }                   
	                }
                ]]>
        </mx:Script>
        <mx:Tree id="tree" left="10" right="10" top="10" bottom="10" />
Как это правильно реализовать? на ас3 это выглядит примерно так:
Код AS3:
var arr1:Array = [];
var arr2:Array = [];
var arr3:Array = [];
var i:int = 0;
var j:int = 0;
 
for(i = 0; i < 500; i++)					// заполняем наши массивы
{
	arr1[i] = arr2[i] = arr3[i] = i;
}
var arrTotal:Array = [arr1, arr2, arr3];	// имитируем нашу ситуацию, в одной коллекции, есть несколько других коллекций
var newArr:Array = [];						// делаем то что нам надо
 
for(i = 0; i < arrTotal[0].length; i++)
{
	newArr[i] = '';							// делаем пустой елемент,
	for(j = 0; j < arrTotal.length; j++)
	{
		newArr[i] += arrTotal[j][i] + ' ';	// получаем елемент1 + елемент2 + елемент3
	}
}
trace(newArr[100]);							// на выходе охота получить что то типа этого.
я в тупике. Кто нибудь может посоветовать как хоть примерно это решить?
З.Ы. за основу взял этот пример


Последний раз редактировалось nOobCrafter; 28.08.2009 в 11:39.