, , :
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="onComplete();">
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.core.UIComponent;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.controls.Text;
import mx.utils.ObjectUtil;
import mx.controls.Label;
import mx.collections.ArrayCollection;
[Bindable] private var dp:ArrayCollection = new ArrayCollection();
private function onComplete():void {
dp = new ArrayCollection(
[
{ col1: "Short", col2: "Other column 1" },
{ col1: "Some long string", col2: "Other column 2" },
{ col1: "Short", col2: "Other column 3" },
{ col1: "Short", col2: "Other column 4" },
{ col1: "The longest value in this column", col2: "Other column 5" },
{ col1: "Short", col2: "Other column 6" },
{ col1: "Short", col2: "Other column 7" }
]
);
}
[Bindable("dataChange")]
private function calcMaxLengths(input:ArrayCollection):ArrayCollection {
if ( input.length > 0 ) {
if ( getChildByName("$someTempUICToRemoveAfterFinished") == null ) {
var uic:UIComponent = new UIComponent();
uic.includeInLayout = false;
uic.visible = false;
uic.name = "$someTempUICToRemoveAfterFinished";
uic.addEventListener(FlexEvent.CREATION_COMPLETE, onTempUICCreated);
addChild(uic);
}
}
return input;
}
private function onTempUICCreated(event:FlexEvent):void {
var renderer:UIComponent = UIComponent(event.target);
var maxLengths:Object = {};
var key:String = "";
var i:int=0;
for ( i=0; i<dp.length; i++ ) {
var o:Object = dp.getItemAt(i);
for ( key in o ) {
if ( !maxLengths.hasOwnProperty(key) ) {
maxLengths[key] = 0;
}
if ( ObjectUtil.isSimple(o[key]) ) {
var cellMetrics:TextLineMetrics = renderer.measureText(o[key]+"");
if ( cellMetrics.width > maxLengths[key] ) {
maxLengths[key] = cellMetrics.width;
}
}
}
}
for ( key in maxLengths ) {
for ( i=0; i<dg.columnCount; i++ ) {
if ( DataGridColumn(dg.columns[i]).dataField == key ) {
DataGridColumn(dg.columns[i]).width = Number(maxLengths[key]) + 12;
}
}
}
removeChild(getChildByName("$someTempUICToRemoveAfterFinished"));
}
]]>
</mx:Script>
<mx:DataGrid id="dg" horizontalScrollPolicy="on" dataProvider="{calcMaxLengths(dp)}" width="400">
<mx:columns>
<mx:DataGridColumn dataField="col1" width="40" />
<mx:DataGridColumn dataField="col2" width="100" />
</mx:columns>
</mx:DataGrid>
</mx:WindowedApplication>