我在尝试调整DataGrid中的列时遇到严重问题。我已经在这一天工作了一天以上,并且在我的机智结束时头疼了。
基本上,我有一个带有NavigatorContent子项的TabNavigator组件。在每个NavigatorContent子项中,我有一个DataGrid,我将宽度设置为100%(这需要能够处理浏览器窗口的大小调整)。我在每个标签中使用优秀的filterable DataGrid from Iwo Banas作为DataGrid。
现在,我在每个DataGrids中显示/隐藏了一些列,这很好。但是,我发现列宽未正确设置。每当我设置列宽(使用this代码)时,所有列似乎都设置为正确的宽度,除了我最近可见的那些列以及紧邻这些列的列。最近显示的那些非常小(虽然我将它们的宽度设置为30)并且这些列左边的那个非常大(尽管我也将它的宽度设置为30)。
我认为这与DataGrids的生命周期有关,因为第一个DataGrid表现良好。当我点击其他标签时,我发现其他DataGrids的宽度没有正确设置。
但是,如果我“看到”其中一个问题DataGrids(即它出现在屏幕上)并且重新调整列大小的代码再次运行,则列的大小正确。
我已尝试过互联网上推荐的一些内容,包括下面列出的问题,但无济于事。
这是我用来调整列大小的代码(取自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 :(得分:0)
所以,经过大量的头部破坏,我终于找到了一个解决方案(至少对我的问题,不知道是否会对其他人有所帮助,但我想我会在这里发布它,因为你永远不知道什么可以帮助某人其他人)。
我决定,当DataGrid在屏幕上工作时调用resize代码然后我需要这样做。所以我想根据点击的标签为相关的DataGrid设置调整大小代码。不是 直截了当,因为似乎没有一种简单的方法来实现选项卡的点击处理程序。我做了一个快速的谷歌并找到了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
}
}