Autor Zpráva
GrayLite
Profil *
Dobrý den,
mám takový problém, který sem zatím nikde neviděl řešený (natož vyřešený :)).

Načítám z XML souboru data, která chci poté zobrazit v komponentě DataGrid. Všude v ukázkových příkladech je napsáno, jak to udělat...jenže nikde není možnost neznalosti počtu sloupců. V PHP by to bylo jednoduché generování názvů proměnných, ale v ActionScriptu 3 sem to vážně nenašel :)

Chtěl bych tedy předat DataProvideru komponenty DataGrid data z XML, a to generování třeba následujícího objektu: dataXML({pole_1:hodnota, pole_2:hodnota,...,pole_x:hodnota}).

Snad jsem to popsal dost srozumitelně :)

Tohle řešení je jediné, co by se tak podobalo mým potřebám, ale dělat if do nekonečna mi přijde blbost....nebo tedy třeba pro 100 sloupců :)

var obj:Object=new Object();
var s:Number=node.childNodes[i].childNodes.length;
for(var j:int=0;j < s;j++)
{
if(i==0)
my_root.colonne_array.push(node.childNodes[i].childNodes[j].node Name);
if(j==0)
obj.titolo=node.childNodes[i].childNodes[j].firstChild.nodeValue ;
if(j==1)
obj.artista=node.childNodes[i].childNodes[j].firstChild.nodeValu e;
if(j==2)
obj.nazione=node.childNodes[i].childNodes[j].firstChild.nodeValu e;
if(j==3)
obj.casa_discografica=node.childNodes[i].childNodes[j].firstChil d.nodeValue;
if(j==4)
obj.prezzo='? '+node.childNodes[i].childNodes[j].firstChild.nodeValue;
if(j==5)
obj.anno=node.childNodes[i].childNodes[j].firstChild.nodeValue;
}
my_root.objects_array.push(obj);

PS: Tento kousek kódu je samozřejmě výřez s funkční aplikace, kde se počítá s maximálně 6ti sloupci v tabulce.
GrayLite
Profil
Odpověď sem vymyslel....tak snad to někomu bude platné ;)

package {
	import flash.display.Sprite;
	import fl.controls.DataGrid;
	import fl.controls.dataGridClasses.DataGridColumn;
	import flash.display.Stage;
	import fl.data.DataProvider;

	public class Main extends Sprite {
		public function Main() {
			var dg:DataGrid;
			var dp:DataProvider;
			var dataXML:XML = <tabulka>
			  <radek>
			    <pole_1>Jméno</pole_1>
			    <pole_2>Příjmení</pole_2>
			    <pole_3>IČ</pole_3>
			    <pole_4>Rodné číslo</pole_4>
			  </radek>
			  <radek>
			    <pole_1>Petr</pole_1>
			    <pole_2>Klíč</pole_2>
			    <pole_3>21321321</pole_3>
			    <pole_4>9832133123</pole_4>
			  </radek>
			  <radek>
			    <pole_1>Ferda</pole_1>
			    <pole_2>Mravenec</pole_2>
			    <pole_3>12313</pole_3>
			    <pole_4>2132165465</pole_4>
			  </radek>
			</tabulka>;
			

			dg = new DataGrid();
			dp = new DataProvider(dataXML);
			
			var numColumns:uint = dataXML.child("radek")[0].elements("*").length();
			
			for (var i:uint=1; i<=numColumns; i++) {
				var tmpCol:DataGridColumn;
				
				tmpCol = new DataGridColumn("pole_" + i);
				tmpCol.headerText = "Název " + i;
				
				dg.addColumn(tmpCol);

			}

			dg.width = stage.stageWidth;
			dg.height = stage.stageHeight;
			dg.dataProvider = dp;

			addChild(dg);
		}
	}
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0