2012-07-24 104 views
0

我遇到严重问题,无法调整DataGrid中的列的大小。我已经参加了一天以上,并且在我的智慧结束时头痛地开始了。Flex DataGrid列不会调整大小

本质上,我有一个TabNavigator组件,里面有NavigatorContent子组件。在每一个NavigatorContent子项中,我都有一个DataGrid,我将宽度设置为100%(这需要能够处理浏览器窗口的大小调整)。我使用优秀filterable DataGrid from Iwo Banas作为每个选项卡中的DataGrid。

现在,我正在使每个DataGrids中的某些列可见/不可见,并且工作正常。但是,我发现列宽度没有正确设置。无论何时设置列宽(使用this代码),除了最近使其可见的列以及列的左边列以外,所有列似乎都设置为正确的宽度。最近看到的那些非常小(尽管我将它们的宽度设置为30),并且这些列左边的非常大(尽管我也将它的宽度设置为30)。

我认为这与DataGrids的生命周期有关,因为第一个DataGrid行为良好。这是当我点击其他标签,我发现其他DataGrids的宽度没有被正确设置。但是,如果我“看到”其中一个问题DataGrid(即它出现在屏幕上)并且重新调整列大小的代码再次运行,那么这些列的大小是正确的。

我已经尝试了一些建议在互联网上的东西,包括下面列出的问题,但无济于事。

这是我用来调整列任何和所有帮助将不胜感激代码(从this回答)

public static function resizeColumn(col:DataGridColumn, size:int):void 
     { 
       var owner:* = col.mx_internal::owner 
       col.mx_internal::owner = null; 

       col.width = size; 

       col.mx_internal::owner = owner; 
     } 

我已经看过以下答案。 Flex DataGrid column width: one column to rule them all? Flex 3 DataGrid Column Width Problem Flex DataGrid Column Width(< - 这个答案得到了最接近我) Unable to change the column width dynamically in flex datagrid

+0

你可以添加工作样品你做了什么,使我们可以帮助你,而不是用于小块代码。 – 2012-07-25 08:45:10

+0

我知道我通常应该包括比我已经包含更多的示例代码,但我将不得不粘贴很多代码。有很多事情在一起发生。我希望有人会有一个关于生命周期和东西的一般解决方案。无论如何,我最近找到了一个我现在要发布的解决方案。 – 2012-07-25 09:41:03

回答

0

所以,一个硕大的脑袋救险的量之后,我终于找到了一个解决方案(至少我的问题,不知道这是否会帮助其他任何人,但我认为我会在这里张贴它,因为你永远不知道什么可以帮助别人)。

我决定,因为当DataGrid在屏幕上调用resize代码时,我需要这样做。所以我想根据点击的标签放置相关DataGrid的调整大小代码。不是直截了当,因为似乎没有一种直接的方式来实现标签的点击处理程序。我做了一个Google,发现this解决方案。

本质上,您通过循环浏览器导航器的子项,获取按钮并添加事件侦听器,为每个选项卡按钮添加单击处理程序。

然后,你做你需要做的处理程序。

代码示例(略从website到一个不同的):

 protected function tbGridArea_creationCompleteHandler(event:FlexEvent):void 
     { 
      for (var i:int=0; i < tbGridArea.getChildren().length; i++) 
      { 
       var tab:Object = tbGridArea.getTabAt(i); 
       tab.addEventListener(FlexEvent.BUTTON_DOWN,myTabClickHandler); 
      } 
     } 

     private function myTabClickHandler(event:Event):void { 
      switch(event.currentTarget.label) { 
      // do whatever you need to do here 
      } 
     }