OK, below is the solution that I came up
with. If anyone sees a simpler / better way, please let me know.
Adobe engineers: I am guessing that
removing items from a data grid is a common operation, in which case it seems
like there should be a very simple and straightforward way of doing so. What am
I missing?
private function sortOnInt(strA:String,
strB:String):int {
var a:int = int(strA);
var b:int = int(strB);
var r:int = 0;
if(a > b) {
r = -1;
} else if(a < b) {
r = 1;
} else if(a == b) {
r = 0;
}
return r;
}
private function removeSelected(): void {
var arr:Array = dgTest.selectedIndices;
arr.sort(sortOnInt);
for(var i:int = 0; i < arr.length;
i++){
acTest.removeItemAt(arr[i]);
}
}
From:
flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Jim Robson
Sent: Thursday, June 08, 2006
11:21 AM
To: flexcoders@yahoogroups.com
Subject: RE: [flexcoders] Re:
Remove selected items from an ArrayCollection / DataGrid?
Yes, I suspect you’re on the right track (except for the fact
that DataGrid indices are Strings – see my other post on that subject).
The other issue I’ve encountered is that the array needs to
be sorted from greatest to least. That’s what I’m working on now.
Of course, this is not straightforward either, because the DataGrid indices are
strings!
Thanks for the help!!!
From: flexcoders@yahoogroups.com
[mailto:[EMAIL PROTECTED] On Behalf
Of bhaq1972
Sent: Thursday, June 08, 2006
11:14 AM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Re: Remove
selected items from an ArrayCollection / DataGrid?
i reckon your the selectedIndicis is changing and therefore cannot
be relied upon within your for loop.
try this. (as a starting point)
private function removeSelected():void
{
var array1:Array = new Array();
for(var j:int;j < dgTest.selectedIndices.length; j++)
{
var num1:int = dgTest.selectedIndices[j];
array1.push(num1);
}
for(var i:int = 0; i < array1.length; i++)
{
acTest.removeItemAt(array1[i]);
}
}
--- In [EMAIL PROTECTED]ups.com,
"Jim Robson" <jim.robson@...>
wrote:
>
> Correction: the app is actually removing ½ of the selected items
with each
> click of the button. The new version of the code below has
additional items
> in the data model in order to make this easier to test.
>
>
>
> Any ideas? Am I just missing something obvious?
>
>
>
> <?xml version="1.0" encoding="utf-8"?>
>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
>
>
>
>
> <mx:Model id="mTest">
>
> <services>
>
> <service type="Plumbing"
cost="$100"
> description="Fix leaky drain" />
>
> <service type="Electrical"
cost="$200"
> description="Wire stairwell lighting"/>
>
> <service type="Roofing"
cost="$300"
> description="Install vent pipe boot"/>
>
> <service type="Carpentry"
cost="$400"
> description="Replace entry door"/>
>
> <service type="Plumbing"
cost="$500"
> description="Install bath tub"/>
>
> <service type="Electrical"
cost="$600"
> description="Wire home office"/>
>
> <service type="Roofing"
cost="$700"
> description="Install ice & water shield"/>
>
> <service type="Carpentry"
cost="$800"
> description="Install sliding patio door"/>
>
> <service type="Plumbing"
cost="$900"
> description="Install hot tub"/>
>
> <service type="Electrical"
cost="$1000"
> description="Install service box"/>
>
> <service type="Roofing"
cost="$1100"
> description="Shingle one-car garage"/>
>
> <service type="Carpentry"
cost="%1200"
> description="Build small deck"/>
>
> </services>
>
> </mx:Model>
>
> <mx:ArrayCollection id="acTest"
> source="{mTest.services.service}" />
>
>
>
> <mx:Script>
>
> <![CDATA[
>
> import
mx.collections.ArrayCollection;
>
>
>
> private function removeSelected():void{
>
> for(var i:int = 0; i <
> dgTest.selectedIndices.length; i++){
>
>
> acTest.removeItemAt(dgTest.selectedIndices[i]);
>
> }
>
> }
>
>
>
> ]]>
>
> </mx:Script>
>
>
>
> <mx:VBox width="400" height="600">
>
>
>
> <mx:DataGrid id="dgTest"
dataProvider="{acTest}"
> width="400" height="500" allowMultipleSelection="true">
>
> <mx:columns>
>
> <mx:DataGridColumn
> headerText="Type" dataField="type" />
>
> <mx:DataGridColumn
> headerText="Service" dataField="description"
/>
>
> <mx:DataGridColumn
> headerText="Cost" dataField="cost" />
>
> </mx:columns>
>
> </mx:DataGrid>
>
>
>
> <mx:Button id="btnTest"
click="removeSelected();"
> label="Remove Selected" />
>
>
>
> </mx:VBox>
>
>
>
>
>
> </mx:Application>
>