Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Окрасить строку в DataGrid от spark (http://www.flasher.ru/forum/showthread.php?t=167811)

maljavka 13.09.2011 14:05

Окрасить строку в DataGrid от spark
 
Здравствуйте.
Имеется DataGrid с одной колонкой всего. Много строк. Строки надо красить в разные цвета, в зависимости от содержания. Как можно это сделать? По форуму порылся, но так и не обнаружил для спаркового...
Или может подскажете другой подходящий компонент? Где несколько проще красить?.. Сам компонент не принципиален. Основные условия - построчный вывод. Полосы прокрутки. Отработка кликов по строкам и в общем-то всё...

saprahan 13.09.2011 14:34

в mx:DataGrid :

Код AS1/AS2:

override protected function drawRowBackground(s:Sprite, rowIndex:int, y:Number, height:Number, color:uint, dataIndex:int):void {
    var renderer:IListItemRenderer = indexToItemRenderer(dataIndex);
    var data:Object = renderer.data;
    //color = function(data)
    super.drawRowBackground(s, rowIndex, y, height, color, dataIndex);
}


maljavka 13.09.2011 14:47

Ясно. Переопределить функцию. Для спарковского грида такого нет сразу?

alatar 13.09.2011 15:24

List (ну или DataGrid, но смысла в этом нет), ItemRenderer.

maljavka 15.09.2011 12:32

Вот нашел такой код:
Код AS3:

<mx:XML id="testData" xmlns="">
                <root>
                <book>
                    <author>Peter F. Hamilton</author>
                    <title>Pandora Star</title>
                    <image>assets/pandoras_star_.jpg</image>
                    <date>Dec 3, 2004</date>
                </book>
                <book>
                        <author>Peter F. Hamilton</author>
                    <title>Judas Unchained</title>
                    <image>assets/judas_unchained.jpg</image>
                    <date>Feb 28, 2006</date>
                </book>
                </root>
        </mx:XML>
 
 
<mx:DataGrid id="dataGrid" x="29" y="303" width="694" height="190" dataProvider="{testData.book}" variableRowHeight="true">
                <mx:columns>
                        <mx:DataGridColumn headerText="Title" dataField="title">
                                <mx:itemRenderer>
                                        <mx:Component>
                                                <mx:HBox paddingLeft="0">
                                                        <mx:Script>
                                                        <![CDATA[
                                                                override public function set data( value:Object ) : void {
                                                                        super.data = value;
                                                                        setStyle("backgroundColor",0xff0000);
                                                                }
                                                        ]]>
                                                        </mx:Script>
                                                        <mx:Text id="mytext" width="100%" text="{data.title}" />
                                                </mx:HBox>
                                        </mx:Component>
                                </mx:itemRenderer>
                        </mx:DataGridColumn>
                </mx:columns>
        </mx:DataGrid>

Не могу понять... Помогите разобраться. Задача такая: Как добавлять динамически данные? у меня просто структура XML несколько другая. И при выводе данных должны присутствовать if(). Как в данном случае добавлять данные в dataGrid? XML при этом меняться не должна. До этого я создавал ArrayCollection и добавлял данные из XML уже туда используя if() и другое. Но как при этом использовать set data?
Ну и соответственно цвет должен меняться в зависимости от данных...
Спасибо

Dimitry_II 15.09.2011 19:45

Как вариант ...
Код AS3:

<mx:XML id="testData" xmlns="">
    <root>
        <book><author>Peter F. Hamilton</author><title>Pandora Star</title><image>assets/pandoras_star_.jpg</image><date>Dec 3, 2004</date></book>
        <book><author>Peter F. Hamilton</author><title>Judas Unchained</title><image>assets/judas_unchained.jpg</image><date>Feb 28, 2006</date></book>
    </root>
</mx:XML>
<fx:Script>
    <![CDATA[
        public function setColor(item:Object):String {
            if (item.title == "Pandora Star") return "#00ff00";
            return "#ff0000";
        }
    ]]>
</fx:Script>
<fx:Declarations>
    <mx:ArrayCollection id="books" list="{testData.book}"/>
</fx:Declarations>
<mx:DataGrid id="dataGrid" x="29" y="303" width="694" height="190" dataProvider="{books}" variableRowHeight="true">
        <mx:columns>
            <mx:DataGridColumn headerText="Title" dataField="title">
                <mx:itemRenderer>
                    <mx:Component>
                        <mx:HBox paddingLeft="0" backgroundColor="{parentDocument.getColor(data)}">
                            <mx:Text id="mytext" width="100%" text="{data.title}"/>
                        </mx:HBox>
                    </mx:Component>
                </mx:itemRenderer>
            </mx:DataGridColumn>
        </mx:columns>
</mx:DataGrid>

P.S. Ваял прямо тут,поэтому могут быть очепятки.

maljavka 16.09.2011 11:28

Идея понята и реализована... Только через override.
Спасибо


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

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