Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   DataGrid: ширина столбца по содержанию (http://www.flasher.ru/forum/showthread.php?t=119811)

izok 31.12.2008 22:41

DataGrid: ширина столбца по содержанию
 
всем доброго времени суток и всех с наступающим ;)

у меня вопрос вот какого плана..
есть DataGrid, заполняемый данными.
заголовки столбцов в нем могут быть самой разной длины, и мне нужно, чтобы:
1. название каждого столбца помещалось в заголовке (без изменения шрифта)
2. если имя столбца очень короткое - чтобы в заголовке столбца не оставалось много свободного места.

иными словами, мне нужно, чтобы ширина каждого столбца менялась в зависимости от содержимого его заголовка..
я понимаю, что нужно имплементировать свой headerRenderer, но, так как ранее с рендерерами дела не имел, пока не получается добиться желаемого эффекта.

допустим, что сам датагрид у меня описан примерно в таком формате:

Код:

<mx:DataGrid headerRenderer="ColumnRenderer" >
<mx:dataProvider>
  <mx:ArrayCollection>
      <mx:source>
          <mx:Object Name="name 1" SecondName="second name 1"/>                                                               
      </mx:source>
  </mx:ArrayCollection>
</mx:dataProvider>                                             

<mx:columns>
<mx:DataGridColumn headerRenderer="ColumnRenderer" headerText="Name" dataField="Name" />
<mx:DataGridColumn headerRenderer="ColumnRenderer" headerText="Second Name" dataField="PrevClaimID" />
</mx:columns>
</mx:DataGrid>

и, соответственно, я создаю файл ColumnRenderer.mxml:

Код AS3:

<mx:Label xmlns:mx="http://www.adobe.com/2006/mxml"  >
 
  <mx:Script>
    <![CDATA[
 
        import mx.controls.dataGridClasses.*;
        import mx.controls.listClasses.*;
        import mx.controls.Label;
 
      override public function set data(value:Object):void
      {
 
        if(value != null)
        {
 
              // допустим, длину текста в заголовке я могу получить так:
            var myListData:DataGridListData = DataGridListData(listData);
            var textLength:int = myListData.label.length;
 
            // чтобы изменить сам текст в заголовке столбца - достаточно сделать так:
            text = "bla-bla";           
 
              // а вот как установить получать ширину заголовка в пикселях, и как установить ширину столбца - не понимаю
              // ....
            }
 
      }
 
  </mx:Script>
 
</mx:Label>

если не сложно - подскажите, как реализовать данную фичу..
нужно ли вообще переопределять функцию set data или же надо идти каким-то иным путем?
Заранее спасибо и с Новым Годом.)


Часовой пояс GMT +4, время: 14:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.