Groups | Blog | Home
all groups > flash actionscript > may 2005 >

flash actionscript : dataGrid can't find my sort function


Pat D.
5/2/2005 4:50:34 PM
I'm working on a Flash Forms Application using MM 2004 MX Professional. I'll
be pulling the data from a web service I wrote (got that working fine). One of
the things I need is to sort a column of "numbers" (passed from my ws as
strings actually) in a special order so that the first is 5, next is 15, then
4, then 14... It all makes sense to me trust me.

To do this I've created a global array called starV so that starV[5] = 0,
starV[15] = 1, etc. To use this when sorting my grid I trap headerRelease and
then use sortOnItems to call my function. Trouble is I can't figure out how to
refer to my function. I've attached some sample code; to play with it you'll
need to create a new Flash Forms Application file. I renamed the default
"form1" to "gridView" but I don't think that matters. Then drag a dataGrid
onto the stage and name it "Cars_dg". The code sets sizes and supplies it.
Clicking the two "stars" columns should invoke my code.

Note that I can do this easily in a more normal "Flash Document", just not in
the Forms Application.

Thanks for ideas and help.

on (load) {
var Cars:Array=[
{Make:"Buick",Model:"Century",Stars:"5",SStars:"4"},
{Make:"Buick",Model:"Decade",Stars:"1",SStars:"4"},
{Make:"Honda",Model:"Civic Hybrid",Stars:"5",SStars:"11"},
{Make:"Honda",Model:"Goldwing",Stars:"15",SStars:"4"},
{Make:"Buick",Model:"Golfer",Stars:"8",SStars:"8"},
{Make:"Honda",Model:"Accord",Stars:"5",SStars:"11"},
{Make:"Honda",Model:"Goldwing",Stars:"13",SStars:"11"},
{Make:"Ford",Model:"Escort",Stars:"3",SStars:"2"}
];

Cars_dg.rowHeight = 30;
Cars_dg.setSize(500,Cars_dg.rowHeight*8+Cars_dg.headerHeight);
Cars_dg._x = (Stage.width - Cars_dg._width)/2; // center on stage
Cars_dg._y = (Stage.height - Cars_dg._height)/2; // center on stage

Cars_dg.columnNames = ["Make","Model","Stars","SStars"];
Cars_dg.getColumnAt(0).width = 150;
Cars_dg.getColumnAt(1).width = 150;
Cars_dg.getColumnAt(2).width = 100;
Cars_dg.getColumnAt(3).width = 100;
Cars_dg.dataProvider=Cars;

Cars_dg.addEventListener("headerRelease",carSort);

_global.starV = [14,8,6,4,2,0,10,11,12,13,14,9,7,5,3,1];
_global.myCol = "";

function starsOrd (a:Object,b:Object):Number {
trace(_global.myCol);
if (_global.starV[a[_global.myCol]] < _global.starV[b[_global.myCol]])
return -1;
if (_global.starV[a[_global.myCol]] > _global.starV[b[_global.myCol]])
return 1;
return 0;
}

function carSort(evtObj:Object):Void {
_global.myCol = Cars_dg.getColumnAt(evtObj.columnIndex).columnName
trace("hr:" + evtObj.columnIndex + ":" + _global.myCol);
var arrayFlags:Number = Array.NUMERIC;
if (evtObj.target.sortDirection == "DESC") arrayFlags =
arrayFlags|Array.DESCENDING;

if ((evtObj.columnIndex == 3) || (evtObj.columnIndex == 2)) {
trace("special sort");
evtObj.target.sortItems(evtObj.target._parent.starsOrd,arrayFlags);
}
}

}
Pat D.
5/2/2005 5:28:47 PM
<sigh> Okay, I only thought I'd tried everything. I dragged my sort function into the headerRelease trap function and now I can call it with just the function name.

AddThis Social Bookmark Button