Показать сообщение отдельно
Старый 15.12.2011, 15:28
Esigns вне форума Посмотреть профиль Отправить личное сообщение для Esigns Найти все сообщения от Esigns
  № 1  
Ответить с цитированием
Esigns

Регистрация: Dec 2011
Сообщений: 59
По умолчанию DataGrid увеличить высоту строки, перенос

Есть датагрид с переносом текста внутри ячеек. Если набрать много текста появляется много строк в ячейке и текст перестает влазить в ячейку датагрид.
Т.е нужно увеличивать высоту строки датагрид в зависимости от текста(количества строк) в ячейке.
Мне показалось проще всего привязать высоту текстфилда в ячейке к высоте строки датагрида и все это повесить на событие конец редактирования ячейки. Думал сделать это примерно так:
Код AS3:
private function setSizeCell() {
      var MultiLine = new MultiLineCell;                            
      dg.rowHeight = MultiLine.textField.height +30;    
}
Мой MultiLineCell(перенос слов в ячейках) если кому будет нужен:
Код AS3:
public class MultiLineCell extends CellRenderer 
{
	var tf:TextFormat = new TextFormat();
        public function MultiLineCell() 
        {   
	     textField.wordWrap = true; 
             textField.autoSize = "left";
	     textField.border = true;
        }
}
Проблема в том что этот код берет не значение высоты текстового поля ячейки, которую я только что отредактировал, а значение текстового поля из класа MultiLineCell(так сказать значение "по умолчанию", которое всегда одинаково).
Как получить высоту текстового поля ячейки, которую я только что закончил редактировать?
Или возможно кто-то посоветует другое решение.

Добавлено через 25 часов 59 минут
Если кому интересно, пришлось сделать так:
Слушатель:
Код AS3:
dg.addEventListener(DataGridEvent.ITEM_EDIT_END, setSizeCell);
Функция setSizeCell:
Код AS3:
private function setSizeCell(e:DataGridEvent) {//перенос строки
			var cellEditor:DataGridCellEditor = dg.itemEditorInstance as DataGridCellEditor;
			var listData:ListData = cellEditor.listData;
			if (int(setNumberOfColums.text) < 1) setNumberOfColums.text = '1';
			var rowNumber:int  = (uint(cellEditor.textField.textWidth)/uint(cellEditor.textField.width));
			if (rowPiksel<=40 + (17.5 * rowNumber)){
			dg.rowHeight = 40 + (17.5 * rowNumber);
			rowPiksel = dg.rowHeight;}  
			else if (rowPiksel > 40 + (17.5 * rowNumber)) return;
		}
Быдлокод конечно, но меня не хватило на что-либо лучшее. Работает не идеально, есть ошибки. Если кто-то знает как их устранить, или вообще решить проблему другим способом, буду очень рад, если вы напишете его сдесь .


Последний раз редактировалось Esigns; 16.12.2011 в 17:28.