Flex 4.5 Spark DataGrid - обнаружение столбца, нажатого в обработчике selectionChange - PullRequest
0 голосов
/ 23 апреля 2011

У меня есть датагрид с искрой с selectionMode="multipleRows".

У меня есть три столбца в таблице данных.

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

Выбор строки должен происходить только при нажатии на один из первых двух столбцов.

Как мне этого добиться?Для сетки данных существует событие selectionChanging, но объект GridSelectionEvent, полученный в обработчике, похоже, не предоставляет никакой информации о столбце, по которому произошел щелчок.

1 Ответ

0 голосов
/ 24 апреля 2011

Я понял это сам.Я не уверен, если это ошибка в спарк DataGrid.Следующее, безусловно, взломано и не чисто.

В функции grid_mouseDownHandler в файле DataGrid.as есть строка:

const columnIndex:int = isCellSelection ? event.columnIndex : -1;

Thisстрока заставляет columnIndex быть установленным как -1, если selectionMode из DataGrid отличается от GridSelectionMode.SINGLE_CELL или GridSelectionMode.MULTIPLE_CELLS.Как я уже упоминал в исходном вопросе, мне нужно, чтобы в моей сетке данных был selectionMode из GridSelectionMode.MULTIPLE_ROWS.

. Я переклассифицировал DataGrid и повторно внедрил grid_mouseDownHandler (в основном, скопировал всефункция).Я изменил только приведенную выше строку, чтобы всегда присваивать columnIndex event.columnIndex.

(мне также пришлось скопировать еще несколько функций, на которые ссылается grid_mouseDownHandler, в мой подкласс, потому что эти функциибыли защищены или mx_internal. (toggleSelection, extendSelection, isAnchorSet)

Затем в обработчике события selectionChanging я мог бы просто сделать следующее:

if( 2 == event.selectionChange.columnIndex )
{
    event.preventDefault();
}

Я понимаю, что это не чистое решение, но это лучшее, что я мог придумать. Может быть, кто-то может предложить лучшее решение?

...