SOLVED - [flexcoders] Remove selected items from an ArrayCollection / DataGrid?
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 youre on the right track (except for the fact that DataGrid indices are Strings see my other post on that subject). The other issue Ive encountered is that the array needs to be sorted from greatest to least. Thats what Im 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 amp; 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 __._,_.___ -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com SPONSORED LINKS Web site design development Computer software development Software design and development Macromedia flex Software development best practice YAHOO! GROUPS LINKS Visit your group "flexcoders" on the web. To unsubscribe from this group, send an
Re: SOLVED - [flexcoders] Remove selected items from an ArrayCollection / DataGrid?
Does this work? private function removeSelected(): void { while (dgTest.selectedIndices.length 0){ acTest.removeItemAt(dgTest.selectedIndices[0]); } } --- In flexcoders@yahoogroups.com, Jim Robson [EMAIL PROTECTED] wrote: 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] mailto:flexcoders%40yahoogroups.com 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. http://www.adobe.com/2006/mxml 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 amp; 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 Yahoo! Groups Sponsor ~-- Get to your groups with one click. Know instantly when new email arrives http://us.click.yahoo.com/.7bhrC/MGxNAA/yQLSAA/nhFolB/TM