0

私はスパークデータグリッドを持っていselectionMode="multipleRows"ます。

データグリッドに 3 つの列があります。

ユーザーのクリックが行の 3 列目にあるときに、行の選択が行われることは望ましくありません。

行の選択は、最初の 2 つの列のいずれかがクリックされたときにのみ行われるべきです。

どうすればこれを達成できますか? selectionChangingデータグリッドのイベントがありGridSelectionEventますが、ハンドラーで受信したオブジェクトは、クリックが発生した列に関する情報を提供していないようです。

ありがとう!

4

1 に答える 1

0

私はこれを自分で理解しました。これが spark DataGrid のバグかどうかはわかりません。以下は間違いなくハックであり、クリーンではありません。

ファイル内のgrid_mouseDownHandler関数には、次の行があります。DataGrid.as

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

この行により、 の がまたは以外のものであるかのようcolumnIndexに が設定されます。元の質問で述べたように、データグリッドに of が必要です。-1selectionModeDataGridGridSelectionMode.SINGLE_CELLGridSelectionMode.MULTIPLE_CELLSselectionModeGridSelectionMode.MULTIPLE_ROWS

DataGrid をサブクラス化し、再実装しましたgrid_mouseDownHandler(基本的に、関数全体をコピーして貼り付けました)。上記の行のみを変更して、常に to を割り当てcolumnIndexますevent.columnIndex

(これらの関数は保護されているか mx_internal だったので、オーバーによって参照されたいくつかの関数をgrid_mouseDownHandlerサブクラスにコピーする必要もありました。( toggleSelectionextendSelectionisAnchorSet)

次に、selectionChangingイベント ハンドラーで、次のことを実行できます。

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

これはきれいな解決策ではないことは承知していますが、私が考えることができる最善の方法です。多分誰かがより良い解決策を提案できますか?

于 2011-04-24T17:49:57.687 に答える