PDA

Просмотр полной версии : Регуляция высоты строки DataGrid


zorexundra
13.02.2012, 13:50
Здравствуйте! Подскажите, пожалуйста!
Есть экземпляр компонента DataGrid:
<mx:DataGrid id="dg" width="100%" height="100%" variableRowHeight="true" wordWrap="true">
<mx:columns>
<mx:DataGridColumn dataField="par1" itemRenderer="myItemRenderer"/>
</mx:columns>
</mx:DataGrid>Код myItemRenderer:
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Text id="ta" htmlText="{data.par1}" width="100%"/>
</mx:Module>Как сделать так, чтобы высота строки DataGrid подстраивалась под высоту элемента Text (id="ta"), тобишь, чтобы весь текст компонента Text был виден в ячейке?

droopy
14.02.2012, 19:29
Не пойму зачем Text обернут в Module, хотя бы уж VBox.

Если html не сильно нужен, то вполне можно оставить без рендерера. Строки будут разной высоты, весь текст виден.

Если нужен html, то лучше использовать примерно такой рендерер:

public class MyRenderer extends DataGridItemRenderer
{
override public function set text(value:String):void
{
super.htmlText = value;
}
}

zorexundra
15.02.2012, 13:01
droopy, спасибо! Но вопрос остаётся открытым.
Я привёл здесь упрощённый пример. Реально itemRenderer-ом может выступать любой компонент и необходимо, что бы высота ячейки подстраивалась под варьируемую высоту itemRenderer.

droopy
16.02.2012, 00:25
DataGrid выставляет для строки такой размер, какой запросит рендерер при вызове measure() - свойства measuredMinHeight и measuredHeight. Попробуйте вот такой рендерер - все высоты выставляет по-разному.


<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
override protected function measure():void
{
super.measure();
var normalHeight:Number = this.measuredHeight;
this.measuredMinHeight = this.measuredHeight = normalHeight * Math.random() * 2;
}
]]>
</mx:Script>
<mx:Label text="aaa"/>
<mx:Button label="bbb"/>
</mx:VBox>