Flex DataGrid: программная подсветка строк - PullRequest
2 голосов
/ 11 февраля 2011

Это кажется чем-то, что должно быть до боли простым, но я даже не могу найти, как перебирать строки в Flex DataGrid.

В основном то, что я пытаюсь сделать, это что-то вроде этого псевдо-code:

for each(var row:Row in myDataGrid.Rows)
{
    if(row.DataObject.Number == 1)
    {
        row.Color = Red;
    }
}

Я пытаюсь использовать кнопку «Сохранить», которая при нажатии либо обрабатывает сохранение, либо выделяет недопустимые строки и высвечивает сообщение, сообщающее пользователю, почему строки недопустимы.Из-за некоторых других сложностей я не могу проверить каждую строку по мере ее ввода.Любая помощь приветствуется!Спасибо.

Ответы [ 4 ]

2 голосов
/ 11 февраля 2011

Сетки данных предназначены для управления их данными, а не для прямого манипулирования ими. Один из способов выполнить то, что вы пытаетесь сделать, - это добавить какое-то свойство, скажем, «действительный», к объектам данных в вашем поставщике и добавить код в средство визуализации, чтобы изменить его внешний вид на основе состояния «действительный». Таким образом, вы можете перебирать объекты в вашем поставщике данных и устанавливать «действительное» свойство на основе проверки, что приведет к тому, что строки в сетке данных автоматически изменят свой вид.

Надеюсь, это поможет.

1 голос
/ 12 февраля 2011

Я добился этого путем переопределения установленных данных. Я предоставил пример кода ниже.

override public function set data(value:Object):void
    {
        super.data=value;
        if(value!=null && value.hasOwnProperty("state") && value.state == "Final State"){               
                setStyle("color", 0xb7babc);
        }else{
            setStyle("color", 0x000000);
        }
        this.selectable=false;
        super.invalidateDisplayList();
    }
1 голос
/ 11 февраля 2011

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

в основном, вы определяете свою сетку данныхкласс средства визуализации элементов:
<mx:DataGrid itemRenderer="ItemRendererClass"(...) ></mx:DataGrid>

, а затем вы определяете класс "ItemRendererClass" как реализующий IDataRenderer:

implements="mx.core.IDataRenderer"

Это упрощенное объяснение, при условии, что вы можете выяснить, каксделать это на себе:)

1 голос
/ 11 февраля 2011

Попробуйте что-то вроде этого:

for each(var o:Object in myDataGrid.dataProvider)
{
    if(o.Number == 1) {
        myDataGrid.selectedItems.push(o);
    }
}

В вашем mxml вы можете установить selectionColor таблицы данных на красный. Смотри: http://blog.flexexamples.com/2008/02/19/setting-the-selection-color-and-selection-disabled-color-for-a-row-in-the-flex-datagrid-control/

Дайте мне знать, если это работает для вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...