Отключить строки в Flex DataGrid

Если я здесь не упускаю что-то очевидное, невозможно отключить одну или несколько строк в DataGrid. Я бы ожидал наличия свойства disabledRows или disabledRowIndidices в компоненте DataGrid или List, но этого, похоже, не существует.

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

Какие-либо предложения?

Изменить. Я понимаю, что отключение строки может означать разные вещи. В моем случае это означает невозможность редактирования строки, даже если для свойства editable datagrid установлено значение true. Однако это также может означать невозможность выбрать строку, но это не то, что я ищу.


person Christophe Herreman    schedule 16.02.2009    source источник
comment
Что означает отключение для строки таблицы данных?   -  person inferis    schedule 16.02.2009
comment
В моем случае это означает, что я не могу его редактировать. Однако это также может означать невозможность выбора строки. Хорошее замечание, обновлю вопрос.   -  person Christophe Herreman    schedule 16.02.2009
comment
Кроме того, таблицы данных не определяются своими строками, они определяются столбцами. Для отключения определенных строк вы говорите о знании базовых данных, что означает обработку их в itemRenderers.   -  person inferis    schedule 16.02.2009


Ответы (4)


Для этого вам потребуются некоторые данные для этой строки, чтобы указать, что она не редактируется. Затем, когда "itemEditBeginning" затем проверьте данные или индекс строки, чтобы включить / отключить поведение по умолчанию с помощью event.preventDefault ...

public function preventEditing(event:DataGridEvent):void
{   
    var status : Boolean = ArrayObjs[rowIndex].isYourCondition;

    if (status == true)
    {
        event.preventDefault();
    }
}

Другой вариант - создать настраиваемый ItemRenderer для вашей ячейки данных, но не думайте, что это то, что вы хотите, поскольку вам нужно будет сделать это для каждой из ваших ячеек.

person AndrewB    schedule 08.06.2009

на самом деле это лучше всего сделать через "itemEditBeginning". Здесь можно найти хорошее руководство: текст ссылки

person Community    schedule 10.03.2009

Алекс Харуи приводит здесь хороший пример источника, http://blogs.adobe.com/aharui/2007/06/disables_list_selection.html Это довольно долгое решение, но оно касается взаимодействия мыши и клавиатуры с сеткой данных. Я согласен с вами, удивительно, что для этого нет «встроенного» метода.

person Community    schedule 19.02.2009

Просто установите функцию для "itemEditBegin" DataGrid, которая делает что-то вроде этого:

protected function validateEdition(event:DataGridEvent):void{
    if([EDITION CRITERA NOT MET]){
          event.preventDefault();
    }
}

<mx:DataGrid id="grid" itemEditBegin="validateEdition(event)" editable="true">
      <mx:columns>
         [[YOUR COLUMN CONFIGURATION]]
      </mx:columns>
</mx:DataGrid> 

event.preventDefault () остановит DataGrid от переключения ItemRenderer на ItemEditor для остановки выпуска строки, не соответствующей критериям. Чтобы это работало, ваш DataGrid должен быть доступен для редактирования.

Это должно помочь.

person Chepech    schedule 13.01.2010