Flex Datagrid + Tab Navigator

时间:2011-03-28 17:41:07

标签: flex datagrid

我有几个datagrids(从某些地图服务中检索数据)。

我想将这些数据网格放在标签导航器的单独标签中。除了第一个选项卡之外,所有工作都很好,它总是在没有任何数据网格的情况下结束。

我尝试过创建策略=“全部”和东西,但第一个标签始终为空。有没有人想知道为什么第一个标签总是空的。

任何解决方法。

由于

var box:HBox=new HBox();
var dg:DataGrid = new DataGrid();
dg.dataProvider = newAC;
box.label=title.text;
box.addChild(dg);
tabNaviId.addChild(box);
tabNaviId.selectedIndex=2;  
resultsArea.addChild(tabNaviId);

dg是正在填充的数据网格。上面的代码是循环的,在每个循环中我创建了一个Hbox + datagrid。然后我将Hbox添加到导航器并最终将导航器添加到resultsArea(这是一个画布)。

上述代码与第一次相比效果很好。

我得到的最终结果是,有一个标签导航器,第一个标签没有任何数据网格,但其余标签都有数据网格。关于为什么会发生这种情况的任何想法。

调用一个名为createDatagrid的函数:

dgCollection.addItem(parentApplication.resultsPanel.createDatagrid( token.name.toString() + " (" + recAC.length + " selected)", recAC, false, callsToMake ));

在另一个Mxml组件中,此函数存在

public function createDatagrid(titleText:String, recACAll:ArrayCollection, showContent:Boolean, callsToMake:Number):DataGrid
        {

            var dg:DataGrid = new DataGrid();
            var newAC:ArrayCollection = new ArrayCollection();
            var newDGCols:Array = new Array();

            for( var i:Number = 0; i < recACAll.length; i ++)
            {
                var contentStr:String = recACAll[i][CONTENT_FIELD];
                var featureGeo:Geometry = recACAll[i][GEOMETRY_FIELD];
                var iconPath:String = recACAll[i][ICON_FIELD];
                var linkStr:String = recACAll[i][LINK_FIELD];
                var linkNameStr:String = recACAll[i][LINK_NAME_FIELD];
                var featurePoint:MapPoint = recACAll[i][POINT_FIELD];
                var titleStr:String = recACAll[i][TITLE_FIELD];

                if( contentStr.length > 0)
                {
                    var rows:Array = contentStr.split("\n");

                    var tmpObj:Object = new Object();

                    if(!showContent)
                    {
                        for( var j:Number = 0; j < rows.length; j++)
                        {
                            var tmpStr:String = rows[j] as String;
                            var header:String = tmpStr.substring(0,tmpStr.indexOf(":"));
                            var val:String = tmpStr.substring(tmpStr.indexOf(":") + 2);
                            if(header.length > 0)
                            {
                                tmpObj[header] = val;
                                if(newDGCols.length < rows.length - 1)
                                {
                                    newDGCols.push( new DataGridColumn(header));
                                }
                            }
                        }
                    }
                    else
                    {
                        if(newDGCols.length == 0)
                        {
                            newDGCols.push(new DataGridColumn(CONTENT_FIELD));
                            newDGCols.push(new DataGridColumn(GEOMETRY_FIELD));
                            newDGCols.push(new DataGridColumn(ICON_FIELD));
                            newDGCols.push(new DataGridColumn(LINK_FIELD));
                            newDGCols.push(new DataGridColumn(LINK_NAME_FIELD));
                            newDGCols.push(new DataGridColumn(POINT_FIELD));
                            newDGCols.push(new DataGridColumn(TITLE_FIELD));
                        }
                    }

                    tmpObj[CONTENT_FIELD] = contentStr;
                    tmpObj[GEOMETRY_FIELD] = featureGeo;
                    tmpObj[ICON_FIELD] = iconPath;
                    tmpObj[LINK_FIELD] = linkStr;
                    tmpObj[LINK_NAME_FIELD] = linkNameStr;
                    tmpObj[POINT_FIELD] = featurePoint;
                    tmpObj[TITLE_FIELD] = titleStr;

                    newAC.addItem(tmpObj);
                }

                if( showHidePic.source == minSourceI )
                {
                    showHidePic.source = minSource;
                }
                else if( showHidePic.source == maxSourceI )
                {
                    showHidePic.source = maxSource;
                }
                curResults = curResults + recACAll.length;

                if (curResults == 1)
                {
                    showInfoWindow(tmpObj);

                    if(showContent)
                    {
                        parentApplication.maps.map.extent = featureGeo.extent;
                    }
                }
                else
                {
                    showInfoWindow(null);
                    // Added to avoid the overview button problem (needs checking)
                    this.removeEventListener(MouseEvent.MOUSE_OVER, handleMouseOver, false);
                    this.removeEventListener(MouseEvent.MOUSE_MOVE,handleMouseOver,false);
                    this.removeEventListener(MouseEvent.MOUSE_OUT,handleMouseOut,false);
                    this.removeEventListener(MouseEvent.MOUSE_DOWN,handleMouseDrag,false);
                    this.removeEventListener(MouseEvent.MOUSE_UP,handleMouseDragStop,false);
                    this.parent.removeEventListener(MouseEvent.MOUSE_MOVE,handleParentMove,false);
                    this.parent.removeEventListener(MouseEvent.MOUSE_UP,handleMouseDragStop2,false);
                    maximizePanel();
                }

            }

            dg.dataProvider = newAC;
            dg.columns = newDGCols;
            dg.rowCount = newAC.length;

            var totalDGCWidth:Number = 0;

            for( var m:Number = 0; m < dg.columns.length; m++)
            {
                var dgc2:DataGridColumn = dg.columns[m];

                /*if(dgc2.headerText.toUpperCase()==LINK_FIELD.toUpperCase()){

                //dgc.itemRenderer=new ClassFactory(CustomRenderer);
                dgc2.itemRenderer=new ClassFactory(CustomRenderer);
                }*/
                var dgcWidth2:Number = dgc2.headerText.length * CHAR_LENGTH;

                for( var l:Number = 0; l < newAC.length; l++)
                {
                    var row2:Object = newAC.getItemAt(l) as Object;
                    var rowVal2:String = row2[dgc2.headerText];

                    if( rowVal2 != null)
                    {
                        var tmpLength2:Number = rowVal2.length * CHAR_LENGTH;

                        if(tmpLength2 < CHAR_MAX_LENGTH)
                        {
                            if(tmpLength2 > dgcWidth2)
                            {
                                dgcWidth2 = tmpLength2;
                            }
                        }
                        else
                        {
                            dgcWidth2 = CHAR_MAX_LENGTH
                            break;
                        }
                    }

                }
                // Added by FT:to change the item renderer for link field


                if( dgc2.headerText == GEOMETRY_FIELD || dgc2.headerText == CONTENT_FIELD ||
                    dgc2.headerText == ICON_FIELD || dgc2.headerText == LINK_FIELD ||
                    dgc2.headerText == POINT_FIELD || dgc2.headerText == TITLE_FIELD ||
                    dgc2.headerText == LINK_NAME_FIELD)
                {
                    if(dgc2.headerText == CONTENT_FIELD && showContent)
                    {
                        //something
                    }
                    else
                    {

                        dgcWidth2 = 0;
                    }
                }

                totalDGCWidth += dgcWidth2;
            }

            dg.width = totalDGCWidth;



            for( var k:Number = 0; k < dg.columns.length; k++)
            {
                var dgc:DataGridColumn = dg.columns[k];
                var dgcWidth:Number = dgc.headerText.length * CHAR_LENGTH;
                for( var n:Number = 0; n < newAC.length; n++)
                {
                    var row:Object = newAC.getItemAt(n) as Object;
                    var rowVal:String = row[dgc.headerText];

                    if(rowVal != null)
                    {
                        var tmpLength:Number = rowVal.length * CHAR_LENGTH;

                        if(tmpLength < CHAR_MAX_LENGTH)
                        {
                            if(tmpLength > dgcWidth)
                            {
                                dgcWidth = tmpLength;
                            }
                        }
                        else
                        {
                            dgcWidth = CHAR_MAX_LENGTH
                            break;
                        }
                    }

                }
                if( dgc.headerText == GEOMETRY_FIELD || dgc.headerText == CONTENT_FIELD ||
                    dgc.headerText == ICON_FIELD || dgc.headerText == LINK_FIELD ||
                    dgc.headerText == POINT_FIELD || dgc.headerText == TITLE_FIELD ||
                    dgc.headerText == LINK_NAME_FIELD)
                {
                    if(dgc.headerText == CONTENT_FIELD && showContent)
                    {
                        dgc.visible = true;
                    }
                    else
                    {

                        dgc.visible = false;
                        dgcWidth = 0;
                    }
                }

                if( dgc.headerText == LINK_COL_NAME)
                {
                    dgcWidth = LINK_COL_WIDTH;
                }

                dgc.width = dgcWidth;
            }

            dg.addEventListener(ListEvent.ITEM_CLICK,rowClicked);
            dg.addEventListener(ListEvent.ITEM_ROLL_OVER,mouseOverRow);
            dg.addEventListener(ListEvent.ITEM_ROLL_OUT,mouseOutRow);

            var title:Text = new Text();
            title.text = titleText;
            title.setStyle("fontWeight","bold");

            //resultsArea.addChild(title);

            return dg;


            //tabNaviId.selectedIndex=2;    


        }
        public function populateGrid(dgCollection:ArrayCollection):void{


            for( var k:Number = 0; k < dgCollection.length; k++)
            {
                var box:HBox=new HBox();
                var dg2:DataGrid=dgCollection.getItemAt(k) as DataGrid;
                box.label="some";
                box.addChild(dg2);
                tabNaviId.addChild(box);

            }
            resultsArea.addChild(tabNaviId);
        }

并将标签导航器声明为

<mx:Image id="showHidePic" click="toggleResults()"/>
<mx:VBox y="20" styleName="ResultsArea" width="100%" height="100%">
    <mx:HBox>
        <mx:Button label="Export to Excel" click="downloadExcel()"/>
        <mx:Button label="Clear" click="clear()" />
    </mx:HBox>
    <mx:VBox id="resultsArea" styleName="ResultsContent" paddingTop="10" paddingLeft="10" paddingRight="10" verticalScrollPolicy="off" horizontalScrollPolicy="off">
        <mx:TabNavigator id="tabNaviId" width="622" height="274" creationPolicy="all">

        </mx:TabNavigator>

    </mx:VBox>
</mx:VBox>

1 个答案:

答案 0 :(得分:0)

摘要,我们可以获得包含您提到的循环的完整代码,以及创建TabNavigator的代码吗?

TabNavigator可能已经有一个初始子项,之后会添加您正在创建的所有子项。