PDA

Просмотр полной версии : DataGrid с закругленными строками


klafuda_klalafu
30.08.2010, 15:39
Хочу сделать нечто подобное :
http://www.flasher.ru/forum/attachment.php?attachmentid=25062&stc=1&d=1283164617
то есть что бы каждая строка датагрида была закруглена, хочется сделать это с помощью скинования.... как можно такую фишку провернуть?
вставка итемрендерера с закруглениями не катит,
было бы супер если бы кто-то подсказал способ вообще вместо того что бы указывать цвета строк указать путь до картинки с неким фоном для каждого состояния (up, down,...)

alatar
30.08.2010, 16:59
Хочу сделать нечто подобное :
В левой крайней колонке рендерер со скруглениями слева, в правой крайней справа.
вставка итемрендерера с закруглениями не катит
В связи с чем?
было бы супер...
свой ItemRenderer со своими стилями.

klafuda_klalafu
31.08.2010, 16:55
свой ItemRenderer со своими стилями.
Не покатит, так как рендерер будет торчать только в тех полях - которые заполнены, а те поля которые пустые - будут квадратными, к тому же: все рендереры будут все равно отображаться в квадратах а мне надо что бы каждая строка - была такой закругленый прямоугольник. И сделать это как-то можно при помощи скинования. Но как?

alatar
31.08.2010, 17:02
рендерер будет "торчать" во всех полях. Вы как его делаете, что он у вас только в заполненных проявляется?

klafuda_klalafu
31.08.2010, 17:28
вот пример:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:mxml="com.dk.mxml*"
minWidth="300" minHeight="100" xmlns:mxml1="com.dk.mxml.*">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:DataGrid left="5" right="5" top="5" bottom="5" dataProvider="{new Array({val:1},{val:2},{val:3})}">
<mx:columns>
<mx:DataGridColumn headerText="TEST">
<mx:itemRenderer>
<fx:Component>
<mxml1:RowRenderer/>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
</s:Application>
и вот рендерер
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" cornerRadius="{this.height/2}" dropShadowVisible="false" backgroundColor="0xff0000">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</mx:Canvas>
как видно из примера рендерер вставляется только в те ячейчки в которых есть дата.
А мне надо что бы каждая ячейка была стилизована. (да же не заполненая)

alatar
31.08.2010, 18:41
Хмм... действительно. Краткий обзор дал следующие результаты. Прийдется наследоваться от DataGrid и переписывать метод:
protected function drawRowBackground(s:Sprite, rowIndex:int, y:Number, height:Number, color:uint, dataIndex:int):void
в котором уже рисовать что угодно, или подсовывать картинку из стилей.

Добавлено через 3 минуты
Собственно, это есть в справке (http://help.adobe.com/ru_RU/AS3LCR/Flex_4.0/mx/controls/DataGrid.html#drawRowBackground%28%29).
И судя по-всему, прийдется использовать scale9Slice, если подставлять свой объект, ввиду отсутсвия параметра width

Добавлено через 5 минут
Также следует обратить внимание на метод drawColumnBackground, скорее всего его тоже прийдется переписывать.

klafuda_klalafu
01.09.2010, 12:10
спасибо агромное, действительно по делу!

Добавлено через 13 часов 42 минуты
нашел по теме
http://www.flasher.ru/forum/showthread.php?t=140160&highlight=ItemRenderer