![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Контрибьютор базы знаний по Флекс
Регистрация: Aug 2005
Сообщений: 690
|
Привет!
Каким образом можно прорисовывать цвет ряда в датагриде в зависимости от значения, полученного из датапровайдера?
__________________
Flex 2 и Co |
|
|||||
|
4AM Games
|
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
4AM Games
|
Вообще не совсем понятно.
Дело в том что дата провайдер содержит в себе объекты, которые передаются ячейкам, тоесть дата провайдер не содержит в себе информации для самой колонки. Есть два способа, либо реализовать возможность смены цвета у каждой ячейки в отдельности (тогда нужно передавать, каждой ячейке цвет), либо вывести цвета в отдельное свойство. Есть вариант через задницу, это задавать цвет скажем только первому эллементу в колонке, и остальные ячейки берут значение первого эллемента. Вот например если юзать отдельное свойство colors package controls
{
import mx.controls.DataGrid;
import mx.core.ClassFactory;
import mx.collections.ArrayCollection;
import mx.controls.dataGridClasses.DataGridColumn;
public class ColoredDataGrid extends DataGrid
{
private var _colors:Array;
public function ColoredDataGrid()
{
super();
itemRenderer = new ClassFactory(ItemRenderer);
}
[Bindable]
[Inspectable]
public function set colors(value:Object):void
{
if(value is ArrayCollection)
{
_colors = (value as ArrayCollection).source;
}
else if(value is Array)
{
_colors = value as Array;
}
for (var i:Number = 0; i < _colors.length; i++)
{
if(columns[i] != null)
{
(columns[i] as DataGridColumn).setStyle("backgroundColor", _colors[i]);
}
}
}
public function get colors():Object
{
return _colors
}
}
}
import mx.controls.Label;
import controls.ColoredDataGrid;
import mx.controls.dataGridClasses.DataGridListData;
class ItemRenderer extends Label
{
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
var ld:DataGridListData = listData as DataGridListData;
var dg:ColoredDataGrid = ld.owner as ColoredDataGrid;
trace(ld.rowIndex);
trace(this.text);
trace("");
/*if(ld.rowIndex > 0 && dg.colors != null && dg.colors[ld.columnIndex] != null)
{
graphics.beginFill(dg.colors[ld.columnIndex]);
graphics.drawRect(0, 0, unscaledWidth, unscaledHeight);
graphics.endFill();
}*/
}
}
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ Последний раз редактировалось Nirth; 01.02.2007 в 22:36. |
|
|||||
|
Контрибьютор базы знаний по Флекс
Регистрация: Aug 2005
Сообщений: 690
|
Цитата:
Кстати, по поводу >> Вот например если юзать отдельное свойство colors Цвет надо передавать в датапровайдере? Я не совсем понял. Можешь привести примерчик...
__________________
Flex 2 и Co |
|
|||||
|
4AM Games
|
В моем случае я цвет подаю через свойство colors
можно и через дата провайдер, скажем сохранять цвета в нулевой позиции, и потом сносить ее(нулевую позицию), чтобы она не рендерилась.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
Контрибьютор базы знаний по Флекс
Регистрация: Aug 2005
Сообщений: 690
|
Ага, ясно, спасибо!
Блин, нафига убрали только dg.setPropertiesAt(2, {backgroundColor:0xFF0000})...
__________________
Flex 2 и Co |
|
|||||
|
Контрибьютор базы знаний по Флекс
Регистрация: Aug 2005
Сообщений: 690
|
использовал вариант http://flasher.ru/forum/showpost.php...98&postcount=5
При использовании ColoredDataGrid все почему-то тормозит.
__________________
Flex 2 и Co |
|
|||||
|
Контрибьютор базы знаний по Флекс
Регистрация: Aug 2005
Сообщений: 690
|
Переделал немного примере Питера Энта по отрисовке фонов рядов в гриде:
<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
public var keyCell:String;
override protected function drawRowBackground(s:Sprite, rowIndex:int, y:Number, height:Number,
color:uint, dataIndex:int):void
{
if (dataIndex > (dataProvider as ArrayCollection).length-1) {
return;
}
var item:Object = (dataProvider as ArrayCollection).getItemAt(dataIndex);
if( item[keyCell] == 0 ) {
color = 0xf97a86;
}
else {
color = 0xFFFFFF;
}
super.drawRowBackground(s,rowIndex,y,height,color,dataIndex);
}
]]>
</mx:Script>
</mx:DataGrid>
__________________
Flex 2 и Co |
|
|||||
|
Контрибьютор базы знаний по Флекс
Регистрация: Aug 2005
Сообщений: 690
|
__________________
Flex 2 и Co |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:41. |
|
|
« Предыдущая тема | Следующая тема » |
|
|