Как сделать ячейку сетки недоступной для редактирования, не испортив вкладки - PullRequest
0 голосов
/ 11 июня 2011

Я использую AdvancedDataGrid в ActionScript 3 / Flex 4. Сетка состоит из 5 столбцов: «Назначение вызывающего абонента», «Метки», «Стратегия», «Режим подтверждения» и «Запрос подтверждения». Все столбцы доступны для редактирования, кроме ярлыков. Однако если вы измените значение режима подтверждения на НИКОГДА, следующий столбец запроса подтверждения станет недоступным для редактирования и будет установлен со значением «n / a» (это требуемая функциональность).

Screen in question

К сожалению, изображение нечеткое. Во втором ряду я изменил значение режима подтверждения на НИКОГДА. Вот что происходит, когда я начинаю вкладывать из ячейки режима подтверждения: 1-я вкладка: запрос подтверждения, заполненный буквой 'n / a'. Я не вижу ничего в фокусе. 2-я вкладка: 5-я вкладка слева в окне просмотра (темно-серая) находится в фокусе. 3-я вкладка: я не вижу ничего в фокусе. 4-я вкладка: кнопка с зеленым «+» (вверху слева) находится в фокусе. Пятая вкладка: сама сетка находится в фокусе. 6-я вкладка: Наконец, я попадаю в ячейку Caller Intent следующего ряда (когда это изображение было снято)

Я попытался установить tabEnabled = "false" и tabFocusEnabled = "false" для кнопки. Я установил только tabFocusEnabled = "false" для AdvancedDataGrid. Но затем фокус Tab начинает перемещаться к компонентам в верхней правой панели и нижней правой панели.

Мне нужно выполнить 2 вещи: 1. Имейте вкладки в сетке, в верхней правой панели и в нижней правой панели. Значение табуляции не должно переходить из одной области в другую. 2. Имейте не редактируемое поле, чтобы не испортить нормальное поведение табуляции.

Ответы [ 2 ]

0 голосов
/ 06 июля 2011

Я много работал над AdvancedDataGrid.Проверьте мою презентацию на http://squaredi.blogspot.com/2011/04/taming-beast-advanceddatagrid.html и http://squaredi.blogspot.com/2011/04/taming-beast-advanceddatagrid-code.html

, чтобы увидеть, приближают ли эти примеры вас к вашим потребностям

0 голосов
/ 11 июня 2011

ПРОСТОЕ РЕШЕНИЕ: Используйте ВВОД для перемещения по сетке.

КОМПЛЕКСНОЕ РЕШЕНИЕ: Используйте комбинацию списков событий, а также блокировку / разблокировку других столбцов.

В файле MXML вы можете отредактировать DataGridColumn (или сделать это с кодом), чтобы выполнить настройку.

<mx:DataGridColumn ... id='col1' editable='false' ... />

Хотя я знаю, что вы сказали, что это не работает, вы можете, когда пользователь выбирает столбец, блокирует ВСЕ ДРУГИЕ КОЛОННЫ и делает их недоступными для редактирования (через code + DataGridColumn с id).В результате все события вкладок переходят на «один шаг вниз».Однако убедитесь, что вы перехватили выходящее событие редактирования, когда все изменения отменены.«Разблокировать» все остальные столбцы.В качестве подтверждения концепции попробуйте создать таблицу только с 1 редактируемыми столбцами

Использовать список событий, чтобы перехватить начало и конец изменений (следовательно, игнорирует его / и т.д.)

//...
datagrid.addEventListner( DataGridEvent.ITEM_EDIT_END, editEvent );
function editEvent( e.DataGridEvent ):void {
    if(e.reason == DataGridEventReason.CANCELLED) {
        e.preventDefault();
    }

    if(e.dataField == 'collumn name i dun want to edit') {
        e.preventDefault();
    }
    //...
    //CODE TO LOCK / UNLOCK EDIT IN OTHER COLLUMNS
    //...
    //you may want to add an ignore, if both before / after values are the same
    //If you really need that code : i can dig it up (just let me know)
}

Таким образомВы можете просто перейти вниз по сетке, введя клавишу ВВОД.(и игнорировать изменения, когда они не нужны).И поймать событие, необходимое для блокировки других сеток.

...