2011-04-23 86 views
0

我有一个火花数据网格selectionMode="multipleRows"Flex 4.5 Spark DataGrid - 在selection中单击的检测列ChangeChange handler

我在数据网格中有三列。

我不希望行选择发生在用户单击位于行的第三列时。

只有当前两列中的一列被点击时,行选择才会发生。

我该如何做到这一点?数据网格有一个selectionChanging事件,但处理程序中收到的GridSelectionEvent对象似乎没有提供有关发生点击的列的任何信息。

谢谢!

回答

0

我自己想通了。我不确定这是否是Spark DataGrid中的错误。以下是绝对的黑客和不干净。

DataGrid.as文件grid_mouseDownHandler功能,有一行:

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

此行是造成columnIndex被设置为-1如果DataGridselectionMode比其他任何GridSelectionMode.SINGLE_CELLGridSelectionMode.MULTIPLE_CELLS。正如我在原始问题中提到的,我需要我的数据网格有selectionModeGridSelectionMode.MULTIPLE_ROWS

我子类的DataGrid和重新实现了grid_mouseDownHandler(基本上是复制粘贴的整体功能)。我只改变了上面的一行,总是把columnIndex分配到event.columnIndex

(我也不得不复制其中一些是由grid_mouseDownHandler在引用我的子类,因为这些功能得到保护或mx_internal更多的功能。(toggleSelectionextendSelectionisAnchorSet

然后,在selectionChanging事件处理程序,我可以做到以下几点:

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

我知道这是不是一个干净的解决方案,但它是我的Coul最好想到。也许有人可以提出更好的解决方案?