|
Page 4 of 8 Loading the XML
/** * Loading an external XML file */ var xmlDP:XML; var xmlListData:XML; var xmlLoader:URLLoader = new URLLoader(); xmlLoader.addEventListener(Event.COMPLETE, dataCompleteHandler); xmlLoader.addEventListener(ProgressEvent.PROGRESS, onProgress); xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, catchIOError); xmlLoader.load(new URLRequest("Cars.xml"));
/** * Once the XML file is done loading it will set the datagrid to read the * dataprovider set by the xml file. */ function dataCompleteHandler(event:Event):void { var ldr:URLLoader = event.currentTarget as URLLoader; xmlDP = new XML(ldr.data);
dp = new DataProvider(xmlDP);//instantiate dataprovider myDataGrid.dataProvider = dp;//assign dataprovider to datagrid setList(xmlDP.Cars.Make, makeList); setList(xmlDP.Cars.Model, modelList); setList(xmlDP.Cars.Year, yearList, true); //setList(xmlDP.Cars.HP, hpList, true); //range values instead of actual values in grid hpList.addItem({label:"All", data:"All"}); hpList.addItem({label:"Under 100", data:"Under 100"}); hpList.addItem({label:"100 - 149", data:"100 - 149"}); hpList.addItem({label:"150 - 199", data:"150 - 199"}); hpList.addItem({label:"200 - 249", data:"200 - 249"}); hpList.addItem({label:"250 to 299", data:"250 to 299"}); hpList.addItem({label:"300 or more", data:"300 or more"}); hpList.allowMultipleSelection = true; setList(xmlDP.Cars.Options.Value, optionList) }
/** If a value is added to the DataGrid then it is added to it's list accordingly. * There is no way to search for a value that is NOT in the DataGrid. */ function setList(newXMLList:XMLList, list:List, isNumeric:Boolean = false):void { var dp_array:Array = new Array(); for each (var item:XML in newXMLList) { var found:Boolean = false; for(var i:int = 0; i < dp_array.length; i++) { if(item[0] == dp_array[i].label) found = true; } if( ! found) dp_array.push({label:item, data:item}); } if(isNumeric) { dp_array.sortOn("label", Array.NUMERIC); list.setStyle("cellRenderer", RightAlignCell); } else dp_array.sortOn("label"); //crude way to add "All" to the top after sorting, there probably is a method //to add a value to the front of the array, but this works. dp_array = dp_array.reverse(); dp_array.push({label:"All", data:"All"}); dp_array = dp_array.reverse(); list.allowMultipleSelection = true; list.dataProvider = new DataProvider(dp_array); }
/** * Show that XML file is not found. */ function catchIOError(event:IOErrorEvent) { trace(event.text); }
/** * Show progress of XML loading */ function onProgress(e:ProgressEvent):void { var percent:Number = (e.bytesLoaded / e.bytesTotal) * 100; trace("Loading..." + percent.toString(10) + "%"); }
|