1

編集可能な DataGrid にバインドされた ArrayCollection があります。別のコンポーネントは、ArrayCollection が (DataGrid の変更の結果として) いつ変更されるかを知る必要があるため、それ自体も更新できるため、ArrayCollection の COLLECTION_CHANGE イベントをリッスンしています。

問題は、編集中の行がフォーカスを失ったときにのみ、DataGrid が ArrayCollection を更新することです。これは、ユーザーが行の列を編集し、テーブルの他の場所を長時間クリックしない可能性があるため (行がフカスを失う原因となる)、私のアプリには適していません。したがって、変更は他の部分に反映されません。アプリケーション。

行がフォーカスを失うたびにではなく、テキスト入力でキーアップ イベントが発生するたびに、データ グリッドが ArrayCollection に変更を通知するようにするにはどうすればよいですか?

乾杯、

クリス

4

2 に答える 2

1

ArrayCollection ではなく、値の編集に使用するコンポーネントにハンドラーを追加します。例:

<mx:DataGridColumn dataField="name" headerText="Name" itemEditor="{nameEditor}" editorDataField="selectedItem" />

次に、これを使用して値を編集します。

<mx:Component id="nameEditor">
    <mx:ComboBox dataProvider="{outerDocument.names}" change="outerDocument.setNameField(event)" close="outerDocument.setNameField(event)" />
</mx:Component>

これは、変更 (および閉じる) イベントのハンドラーです。

public function setDestinationField(event:*):void {
    var destination:String = (event.target as ComboBox).selectedLabel;
    if (destination === '') {
        delete _gridData[_currentlyEditedRowIndex].destination;
    } else {
        _gridData[_currentlyEditedRowIndex].destination = destination;
    }
}

_currentlyEditedRowIndexこれをグリッドに追加することで設定されます。

itemEditBegin="beginEdit(event);"
于 2010-02-21T03:48:24.957 に答える
0

ガブリエルに感謝します。あなたは私を正しい道に導いてくれました。他の誰かが将来同じことをする必要がある場合に備えて、ここに最終的な解決策を投稿します。

  <mx:DataGridColumn headerText="Title" width="300" dataField="title">
    <mx:itemEditor>
      <mx:Component>
        <mx:TextInput change="data.title = text" />
      </mx:Component>
    </mx:itemEditor>
  </mx:DataGridColumn>

入力でテキストが変更されるたびに、データ プロバイダーとして使用されている ArrayCollection も更新されるため、他のコンポーネントは COLLECTION_CHANGE イベントをリッスンします。

于 2010-02-21T05:01:11.887 に答える