我希望 DataGridColumn 或 AdvancedDataGridColumn 会自动调整它的宽度,以适应其中的内容..
我是新来的。我想实现类似 HTML 表格的东西。
呈现的数据是简单的文本。有些行的文本稍长,在这种情况下,我想自动扩展 DataGridColumn 的宽度。
任何帮助解决这个问题。
提前致谢
我希望 DataGridColumn 或 AdvancedDataGridColumn 会自动调整它的宽度,以适应其中的内容..
我是新来的。我想实现类似 HTML 表格的东西。
呈现的数据是简单的文本。有些行的文本稍长,在这种情况下,我想自动扩展 DataGridColumn 的宽度。
任何帮助解决这个问题。
提前致谢
您遇到了 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,它提供了一些非常方便的方法来处理这些问题。在我所做的测试中,它也相当快。
这是我的做法,而且效果很好......
创建一个可绑定变量并给它一个起始编号(比如 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;
}
我遇到了同样的问题,您应该事先知道较长字符串的大小,然后为 MinWidth 分配该大小并让列 resizeable = 'false'。
它对我有用
如果您能猜出可能的宽度,您可以将宽度设置为某个固定百分比。但我会建议另一个选项:
通过这种方式,您的长文本将被放置在多行中,并且只会增加该行高。试一试。如果你不想要这个,那么我认为你可能需要编写一个扩展 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