1. 使用itemRenderer
<mx:DataGridColumn headerText="网站简介">
<mx:itemRenderer>
<mx:Component>
<mx:Label text="{data.desc}"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
这里有个内置的data属性,可以用它访问外部DataGrid绑定的数据源。
2. 列自动换行
<mx:DataGridColumn headerText="网站简介" dataField="desc" wordWrap="true"/>
这样可以达到自动换行的目的,但是DataGrid默认每行的高度是相等的,于是某单个单元格内容过多,就会把所有行的高度撑大。
3. 内容自动截取
使用内嵌label组件,然后内容自动截取的方式可以解决上述问题。
<mx:DataGridColumn headerText="网站简介">
<mx:itemRenderer>
<mx:Component>
<mx:Label text="{data.desc}" truncateToFit="true"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
4. 行高不一
如果一定要显示所有内容,这就存在问题了。有人说itemRenderer中使用VBox来解决,确定这个方法不可行。可以使用DataGrid 的 variableRowHeight="true" ,默认variableRowHeight="false",表示所有的行高相等。
---------------------
DataGrid和TileList都是基于list的组件(直接或间接基类是ListBase)。出于性能考虑(List每次滚动都要重新度量呈现区域 的高度,确保不会出现某行被边框遮掩掉部分而造成显示不全),Adobe在设计List组件时将其设计成了等高行列表。
rowHeight:Number [读写](ListBase)
行高(以像素为单位)。只有在 variableRowHeight 属性设置为 true 时,所有的行高才相等。如果未指定此属性,则行高基于字体大小和渲染器的其它属性而定。
variableRowHeight:Boolean [读写](ListBase)
一个标志,指示各行是否可以采用不同的高度。TileList 和 HorizontalList 将忽略此属性。如果设置为 true,则各行可以具有不同的高度值。
默认值为 false.
上面两个描述有冲突,经测试variableRowHeight为true时,行高可以不同。
<mx:DataGrid x="10" y="10" dataProvider="{employees}" fontSize="14" width="1154" height="430" variableRowHeight="true">
<mx:columns>
...
<mx:DataGridColumn headerText="网站简介" dataField="desc" wordWrap="true"/>
...
</mx:columns>
</mx:DataGrid>