7

我希望 DataGridColumn 或 AdvancedDataGridColumn 会自动调整它的宽度,以适应其中的内容..

我是新来的。我想实现类似 HTML 表格的东西。

呈现的数据是简单的文本。有些行的文本稍长,在这种情况下,我想自动扩展 DataGridColumn 的宽度。

任何帮助解决这个问题。

提前致谢

4

4 回答 4

5

您遇到了 DataGrid 和 AdvancedDataGrid 的最大问题之一。我绝对讨厌让单元格内容看起来很舒服是多么困难。由于一些不明显的原因,狭窄的字段值将出现在非常宽的单元格中,而宽的内容和标题将被压缩。

由于某种原因,第一列和最后一列尤其如此。

我找到的唯一解决方案是在列上设置 minWidth 属性,我必须首先查看数据以找到这些列中最宽的异常值并确保它们适合。另一个有帮助的解决方案是在左侧和右侧设置虚拟列,它们的宽度和 minWidths 和 maxWidths 非常小,比如 5,这似乎允许中间的真实列更好地“呼吸”。

<mx:columns>
  <mx:DataGridColumn id="leftDummy" width="5" minWidth="5" maxWidth="5"/>
  <!-- Your "real" columns here, with minWidth assignments -->
  <mx:DataGridColumn id="rightDummy" width="5" minWidth="5" maxWidth="5"/>
</mxcolumns>

不过要小心。如果您在列上设置宽度,则它不会被解释为文字值或实际百分比,而是某种半固定的比例。我只能假设列大小的过程已经厌倦了计算并决定对列宽进行某种“合理”的解释——当然,这在很多时候被证明是完全不合理的。

此刻我非常沮丧,我正在考虑使用 3rd 方产品ElfGrid,它可以解决这些问题等等。查看文档,尤其是 ElfColumnUtils,它提供了一些非常方便的方法来处理这些问题。在我所做的测试中,它也相当快。

于 2010-05-21T15:15:20.637 回答
1

这是我的做法,而且效果很好......

创建一个可绑定变量并给它一个起始编号(比如 100),例如:

[Bindable] private var colWidth:int = 100;

使用数据绑定来调整列的大小,例如:

mx:DataGridColumn width="{colWidth}"

将调整大小事件处理程序添加到您的数据网格,例如:

myDataGrid.addEventListener(ResizeEvent.RESIZE , onDataGridResize);

在处理程序中侦听数据网格的新宽度,取该数字并除以列数(如果所有列都相等),或者做一些数学运算来创建列宽度的“百分比” , 前任:

private function onDataGridResize(event:ResizeEvent):void {
  colWidth = myDataGrid.width / numberOfColumns;
}
于 2012-07-19T13:17:12.787 回答
0

我遇到了同样的问题,您应该事先知道较长字符串的大小,然后为 MinWidth 分配该大小并让列 resizeable = 'false'。

它对我有用

于 2011-07-05T18:35:12.690 回答
0

如果您能猜出可能的宽度,您可以将宽度设置为某个固定百分比。但我会建议另一个选项:

  1. 将数据网格的 variableRowHeight 属性设置为 true
  2. 将具有较长文本的列的 wordWrap 属性设置为 true。

通过这种方式,您的长文本将被放置在多行中,并且只会增加该行高。试一试。如果你不想要这个,那么我认为你可能需要编写一个扩展 datagridColumn 的新类。

<mx:DataGrid dataProvider="{testAC}" width="80%" height="100%" variableRowHeight="true">
         <mx:columns>
              <mx:DataGridColumn dataField="company" wordWrap="true"/>                    <mx:DataGridColumn dataField="share"/>
              <mx:DataGridColumn dataField="expense"/>
        </mx:columns>
 </mx:DataGrid>

干杯,PK

于 2010-05-21T11:50:06.133 回答