PDA

Volledige versie bekijken : Datagrid toont array inhoud niet


ivo knuit
%Europe/Berlin %942 %2006, 23:36
Hallo allemaal,

ik ben wat aan het stoeien met de Datagrid maar helaas niet zonder problemen.
Een XML bestand bestaat uit een aantal nodes en attributen die in een object array worden geplaatst. Dit array wordt naar mijn idee goed gevuld. Daarna probeer ik de resultaten te tonen met de Datagrid maar hij toont geen data. De DataGrid staat in m'n library gelinkt als "DataGrid" en onderstaande code staat op de eerste frame.
Iemand een idee?

Hier is de code:

var ActiviteitenArray:Array = new Array();
var aantal_activiteiten:Number;
var root:MovieClip = this;

// Create a new DataGrid component instance.
this.createClassObject(mx.controls.DataGrid, "MyDataGrid", 1);

//Define XML and build object array
myXML = new XML();
myXML.ignoreWhite = true;
myXML.onLoad = parse;
myXML.load("algemeen_activiteiten.xml");
function parse(success) {
if (success) {
var activiteit = this.firstChild.childNodes;
aantal_activiteiten = activiteit.length;
for (var i = 0; i<aantal_activiteiten; i++) {
if (activiteit != null) {
ActiviteitData = new Object;
ActiviteitData.datum = activiteit[i].attributes.datum;
ActiviteitData.naam = activiteit[i].attributes.naam;
ActiviteitData.plaats = activiteit[i].attributes.plaats;
ActiviteitData.tijd = activiteit[i].attributes.tijd;
ActiviteitData.organisatie = activiteit[i].attributes.organisatie;

ActiviteitenArray[i] = ActiviteitData;
trace(ActiviteitenArray[i].datum + " "+ ActiviteitenArray[i].naam + " "+ ActiviteitenArray[i].plaats + " "+ ActiviteitenArray[i].tijd + " "+ ActiviteitenArray[i].organisatie);
}//End if
}//End for
} else {
trace("Error loading XML file.");
}
};

// Assign the data provider to the DataGrid to populate it.
MyDataGrid.dataProvider = ActiviteitenArray;

/* Set some basic grid properties.
Note: The data grid's row height should reflect
the number of lines you expect to show in the MultiLineCell
cell renderer. The cell renderer wil size to the row height.
About 40 for 2 lines or 60 for 3 lines.*/
MyDataGrid.setSize(740,480);
MyDataGrid.move(283,0);
MyDataGrid.rowHeight = 40;
MyDataGrid.getColumnAt(0).width = 125;
MyDataGrid.getColumnAt(1).width = 240;
MyDataGrid.getColumnAt(2).width = 125;
MyDataGrid.getColumnAt(3).width = 125;
MyDataGrid.getColumnAt(4).width = 125;
MyDataGrid.resizableColumns = true;
MyDataGrid.vScrollPolicy = "auto";
//MyDataGrid.setStyle("backgroundColor", 0xD5D5FF);

En de XML:

<?xml version="1.0" ?>
<activiteiten>
<activiteit datum="21-05-2006" naam="Danexamentr. JJ" plaats="Made" tijd="10.00 – 12.00 uur" organisatie="JBN-ZN"/>
<activiteit datum="03-06-2006" naam="Danexamen judo" plaats="Gilze" tijd="17.00 – 22.00 uur" organisatie="JBN-ZN"/>
<activiteit datum="03-06-2005" naam="Danexamens Jiu-Jitsu"plaats="Made" tijd="17.00 – 22.00 uur" organisatie="JBN-ZN"/>
<activiteit datum="11-06-2006" naam="Budo Stage senioren" plaats="Gilze" tijd="10.00 – 13.00 uur" organisatie="JBN-ZN"/>
</activiteiten>

Folkert
%Europe/Berlin %952 %2006, 23:51
code was denk ik niet nodig geweest, wellicht helpt het je als je even de Datagrid component in je Library sleept ;)

ivo knuit
%Europe/Berlin %956 %2006, 23:56
Ha Folkert, bedankt voor je reactie.

Maar zoals je in mijn vraag kon lezen heb ik dat al gedaan. Het was wel een andere domme fout (zal het tijdstip wel zijn). :P de code om de DataGrid te voorzien van data werd geheel niet aangeroepen. Werkt nu wel. Hij toont alleen de XML attributen in de verkeerde volgorde (5,4,3,2,1) ipv (1,2,3,4,5). Enig idee waarom? Ik heb al geprobeerd met ActiviteitenArray.reverse(); voordat ik de data koppel aan de DataGrid.

Alvast bedankt weer..

Folkert
%Europe/Berlin %959 %2006, 00:01
De data staat wel degelijk in de Datagrid.
Detail is dan wel dat de onderstaande code moet worden verplaatst naar de onLoad function van de xml

// Assign the data provider to the DataGrid to populate it.
MyDataGrid.dataProvider = ActiviteitenArray;


dus de onLoad komt er zo uit te zien

function parse(success) {
if (success) {
var activiteit = this.firstChild.childNodes;
aantal_activiteiten = activiteit.length;
for (var i = 0; i<aantal_activiteiten; i++) {
if (activiteit != null) {
ActiviteitData = new Object;
ActiviteitData.datum = activiteit[i].attributes.datum;
ActiviteitData.naam = activiteit[i].attributes.naam;
ActiviteitData.plaats = activiteit[i].attributes.plaats;
ActiviteitData.tijd = activiteit[i].attributes.tijd;
ActiviteitData.organisatie = activiteit[i].attributes.organisatie;

ActiviteitenArray[i] = ActiviteitData;
trace(ActiviteitenArray[i].datum + " "+ ActiviteitenArray[i].naam + " "+ ActiviteitenArray[i].plaats + " "+ ActiviteitenArray[i].tijd + " "+ ActiviteitenArray[i].organisatie);
}//End if
}//End for
// Assign the data provider to the DataGrid to populate it.
myDataGrid.dataProvider = ActiviteitenArray;
} else {
trace("Error loading XML file.");
}
}

Verder zou ik je graag mee willen geven dat het gebruik van Hoofdletters eigenlijk voorbehouden is aan classes, niet aan variabelen of arrays

ivo knuit
%Europe/Berlin %964 %2006, 00:08
Bedankt weer voor je snelle reactie.
Toevallig ook nog enig idee of ik de background van de DataGrid transparant kan maken??

Folkert
%Europe/Berlin %971 %2006, 00:19
hahaha lekker langs elkaar heen aan het communiceren ;)
mooi dat die werkt en voor het omdraaien kan je wellicht even na het maken van je datagrid dit zetten

MyDataGrid.columnNames = ["datum", "naam", "plaats", "tijd","organisatie"];