Not sure what that means ...

Well, until I find something better - my deadline is fast approaching and I 
don't have time to wait so I figured out a hack. It involves 2 event listeners 
and "jolting" the dataProvider to simulate a manual reordering (which triggers 
the right resizing btw). Also, I need DataGrid reordering to NOT short circuit 
so it detects if you're reordering vs shuffling data from one DG to the other.

Code:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"; layout="absolute" 
creationComplete="init()">
        <mx:Script>
                <![CDATA[
                        import mx.events.DragEvent;
                        import mx.events.CollectionEvent;
                        
                        import mx.collections.ArrayCollection;
                                                
                        public var derXML:XML = <root> 
                                                                <category 
order="0" x="0" y="0" width="200" height="200">
                                                                        
<name>Category 1</name>
                                                                        <item 
order="0">
                                                                                
<text>Some item number 1 in cat 1</text>
                                                                        </item>
                                                                        <item 
order="1">
                                                                                
<text>Some item number 2 in cat 1</text>
                                                                        </item>
                                                                        <item 
order="2">
                                                                                
<text>Some item number 3 in cat 1</text>
                                                                        </item>
                                                                        <item 
order="3">
                                                                                
<text>Some item number 4 in cat 1</text>
                                                                        </item>
                                                                        <item 
order="4">
                                                                                
<text>Some item number 5 in cat 1</text>
                                                                        </item>
                                                                </category>
                                                        </root> ;
                                                        
                        public var derXML2:XML = <root> 
                                                                <category 
order="0" x="0" y="0" width="200" height="200">
                                                                        
<name>Category 2</name>
                                                                        <item 
order="0">
                                                                                
<text>Some item number 1 in cat 2</text>
                                                                        </item>
                                                                        <item 
order="1">
                                                                                
<text>Some item number 2 in cat 2</text>
                                                                        </item>
                                                                        <item 
order="2">
                                                                                
<text>Some item number 3 in cat 2</text>
                                                                        </item>
                                                                        <item 
order="3">
                                                                                
<text>Some item number 4 in cat 2</text>
                                                                        </item>
                                                                        <item 
order="4">
                                                                                
<text>Some item number 5 in cat 2</text>
                                                                        </item>
                                                                </category>
                                                        </root> ;               
                                        
                        
                        [Bindable] var derData:ArrayCollection;
                        [Bindable] var derData2:ArrayCollection;
                        private var sourceDG:DataGrid;
                        
                        
                        public function init():void {

                                buildMXMLfromXML();
                        
                        }//end func
                        
                        public function buildMXMLfromXML():void {
                                                                                
                
                                var categoriesXML:XML = derXML.category.(@order 
== 0)[0];
                                var categoriesXML2:XML = 
derXML2.category.(@order == 0)[0];

                                //get the items for this category
                                var itemList:XMLList = categoriesXML.item;
                                var itemList2:XMLList = categoriesXML2.item;
                                
                                derData = new ArrayCollection();
                                derData2 = new ArrayCollection();
                                
                                for (var j:uint=0;j<itemList.length();j++) {
                                        
derData.addItem({item:itemList[j].text.toString()});
                                }//end for
                                
                                for (var j:uint=0;j<itemList2.length();j++) {
                                        
derData2.addItem({item:itemList2[j].text.toString()});
                                }//end for
                                
                                mainDataGrid.dataProvider = derData;
                                mainDataGrid2.dataProvider = derData2;
                                
                        }//end function buildMXMLfromXML()
                        
                        
                        public function valueCommitHandler(evt:Event):void {
                                
                                var tmpDG:DataGrid = evt.currentTarget as 
DataGrid;
                                joltDataProvider(tmpDG);
                                resizeDG(tmpDG);
                                                                
                        }//end function
                        
                        
                        public function dragDropHandler(evt:DragEvent):void {
                                
                                var tmpDG:DataGrid = evt.currentTarget as 
DataGrid;
                                
                                //reordering gets short circuited if we don't 
do this
                                if (sourceDG != tmpDG) {
                                        joltDataProvider(tmpDG);
                                }
                                
                                resizeDG(tmpDG);
                                
                        }//end function
                        
                        public function resizeDG(dg:DataGrid):void {
                                
                                var measureHeight:Number = 
dg.measureHeightOfItems(-1,dg.dataProvider.length);
                                
                                if (measureHeight > 10) {
                                        dg.height = dg.viewMetrics.top + 
measureHeight + dg.viewMetrics.bottom;
                                }//end if
                                
                        }//end function
                        
                        //This trigger something in the DataGrid for a re-render
                        public function joltDataProvider(dg:DataGrid):void {
                                
                                //in case the user just emptied the 
DG.dataProvider
                                if (dg.dataProvider.length > 0) {
                                        var tmpItm = 
dg.dataProvider.removeItemAt(0);
                                        dg.dataProvider.addItemAt(tmpItm,0);
                                }
                                
                        }//end function
                        
                        public function registerSourceDG(evt:Event):void {
                                
                                sourceDG = evt.currentTarget as DataGrid;
                                
                        }//end function
                        
                        
                ]]>
        </mx:Script>
        <mx:VBox width="800">
                <mx:Box id="category1" width="100%">
                
                        <mx:DataGrid id="mainDataGrid" 
                                                dragEnabled="true" 
                                                dropEnabled="true" 
                                                dragMoveEnabled="true" 
                                                editable="false"
                                                allowDragSelection="true"
                                                verticalScrollPolicy="off"
                                                variableRowHeight="true"
                                                
valueCommit="{valueCommitHandler(event)}"
                                                
dragDrop="{dragDropHandler(event)}"
                                                
dragStart="{registerSourceDG(event)}"
                                                
                                                width="100%" 
                                                showHeaders="false"
                                                alternatingItemColors="#FFFFFF"
                                                borderThickness="0"
                                                verticalGridLines="false"
                                                rollOverColor="#AAA9A9">
                                <mx:columns>
                                        
                                        <!-- Text -->
                                        <mx:DataGridColumn dataField="item" 
paddingLeft="5" wordWrap="true"/>
                                        
                                </mx:columns>
                        </mx:DataGrid>
                        
                </mx:Box><!-- end category 1 -->
                
                <mx:Box id="category2" width="100%">
                        
                        <mx:DataGrid id="mainDataGrid2" 
                                                dragEnabled="true" 
                                                dropEnabled="true" 
                                                dragMoveEnabled="true" 
                                                editable="false"
                                                allowDragSelection="true"
                                                verticalScrollPolicy="off"
                                                variableRowHeight="true"
                                                
valueCommit="{valueCommitHandler(event)}"
                                                
dragDrop="{dragDropHandler(event)}"
                                                
dragStart="{registerSourceDG(event)}"
                                                
                                                width="100%" 
                                                showHeaders="false"
                                                alternatingItemColors="#FFFFFF"
                                                borderThickness="0"
                                                verticalGridLines="false"
                                                rollOverColor="#AAA9A9">
                                <mx:columns>
                                                
                                        <!-- Text -->
                                        <mx:DataGridColumn dataField="item" 
paddingLeft="5" wordWrap="true"/>
                                        
                                </mx:columns>
                        </mx:DataGrid>
                </mx:Box><!-- end category 2 -->
                        
        </mx:VBox>
        
</mx:Application>



--- In [email protected], Alex Harui <aha...@...> wrote:
>
> You might get more than on e updateComplete.
> 
> 
> On 3/18/10 9:30 AM, "atomilux" <atomi...@...> wrote:
> 
> 
> 
> 
> 
> 
> updateComplete failed because the dataProvider came back as null.
> 
> viewMetrics added back in.
> 
> --- In [email protected] <mailto:flexcoders%40yahoogroups.com> , 
> Alex Harui <aharui@> wrote:
> >
> > ValueCommit probably isn't the right event.  The DG probably doesn't have 
> > the final width yet so the heights will not calculate correctly.  Maybe try 
> > updateComplete.  Also, you are not factoring in viewMetrics.top/bottom.
> >
> >
> > On 3/16/10 8:08 AM, "atomilux" <atomilux@> wrote:
> >
> >
> 
> 
> 
> 
> 
> 
> --
> Alex Harui
> Flex SDK Team
> Adobe System, Inc.
> http://blogs.adobe.com/aharui
>


Reply via email to