Надеюсь, кто-то может мне помочь здесь. У меня есть DataGrid, который использует пользовательские itemrenderers. Все работает отлично, за исключением одного типа itemrenderers, где многострочный текст задается в более поздней точке (он поступает из базы данных в зависимости от некоторых условий). В этом случае текст становится многострочным, как и должен, но высота строки не увеличивается, поэтому текст перекрывает следующую строку.Flex: принудительно перерисовать DataGrid при изменении текста в пользовательских itemrenderers
Если я изменяю размер столбца, ряды изменяются до нужного размера (поскольку текст уже есть, а метка имеет правильную высоту). Также, если я прокручиваю вниз, это выглядит хорошо.
Как я могу заставить изменить размер строки до нужной высоты после того, как текст был установлен?
Я пробовал почти все - validateNow() на itemrenderer и datagrid после того, как я получу новую высоту ярлыка и еще много чего.
Я знаю, что хорошим способом было бы выполнить sql-запросы перед передачей данных в datagrid, но это динамический блок метаданных и довольно сложный. Должен быть способ просто перерисовать DataGrid?
Он работал хорошо с более ранними версиями SDK, но не с моей новой установки (Flex SDK 4,13 + AIR 14)
Вот код для DataGrid:
<s:DataGrid id="dG"
variableRowHeight="true"
creationComplete="dgCreation()"
width="100%"
height="100%"
dataProvider="{theDataProvider}"
doubleClickEnabled="true"
initialize="dG.grid.rowBackground = dG.alternatingRowColorsBackground"
selectionChanging="dG_selectionChangingHandler(event)">
<SMT:columns>
<s:ArrayList>
</s:ArrayList>
</SMT:columns>
</s:DataGrid>
И ItemRenderer:
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
textAlign="left">
<fx:Script>
<![CDATA[
override public function set label(value:String):void
{
// do the sql lookup here
}
//responder from async dbCall
public function onLookupComplete(result:SQLResult):void
{
myContent.text = resultString;
}
]]>
</fx:Script>
<s:Label id="myContent"
left="5"
top="9"
text=""
maxDisplayedLines="5"
lineBreak="toFit"
verticalAlign="top"
width="100%"/>
</s:GridItemRenderer>
Большое спасибо за ваше время!
К сожалению, это не поможет в моем случае. Я также попытался установить текстовое прохождение commitProperties(), неважно, как я его установил, размер рендеринга по-прежнему не сбрасывается. Мне нужен способ заставить datagrid повторно отобразить каким-то образом. – Philarmon