2

2 つの異なる UI コンセプトがあります: CellValueChanging と CellValueChanged です。

DevExpress ドキュメントから引用:

CellValueChanging イベントは、編集された値が変更される (ユーザーが文字を入力または削除する、ドロップダウン リストから値を選択するなど) たびに発生します。

一方、CellValueChanged は、ユーザーが Enter キーを押すか、アクティブ セルの外側をクリックしてセルの編集を行ったときに発生します。

今私の問題は、コンボボックス型の列があり、常に CellValueChanging をスキップして変更を最終的にしたいということです。現在の動作では、ユーザーがコンボボックスから項目を選択しても、変更はすぐには有効になりません (たとえば、ビューは変更に従って再ソートされません)。ユーザーがEnterキーを押すか、セルの外側をクリックするまで、変更は受け入れられません。

--------------- 2013/07/26 14:25更新---------------
前回の質問で誤解を招いてしまい申し訳ありませんでしたので、言い直します。

現在の動作は次のとおりです。

Pic1: 初期状態。行はターゲットのアルファベット順にソートされます。
ここに画像の説明を入力

Pic2: 2 行目の値を B から D に変更します
ここに画像の説明を入力

Pic3: アイテム D をマウスで 1 回左クリックすると、ドロップダウンが消え、セルの値が D に変わります。ただし、行は並べ替えられません。
ここに画像の説明を入力

Pic4: セルの外側をクリックするか、Enter キーを押すと、行が並べ替えられます。
ここに画像の説明を入力

私が達成したいのは、Pic3 のステップをスキップすることです。言い換えれば、追加の kepboard やマウス クリックを行わずに、変更をすぐにコミットしたいということです。

ここで示しているのは、私のアプリケーションの単純化された例です。エラーが発生するため、CellValueChanged イベント ハンドラー ロジックを CellValueChanging または EditValueChanged に移動できません。

4

2 に答える 2

1

エンドユーザーがグリッドビューのセル エディターで何らかの値を変更した瞬間をキャッチしたい場合 (コンボボックスでアイテムを選択するなど)、対応する RepositoryItem のEditValueChanged イベントを処理してください。この値をすぐに送信する (変更を最終的に行う) に は、対応するコンテナーのPostEditorメソッドを呼び出す必要があります。

repositoryItemComboBox1.EditValueChanged += repositoryItemComboBox1_EditValueChanged;
//...
void repositoryItemComboBox1_EditValueChanged(object sender, EventArgs e) {
    gridView1.PostEditor();
    // do something else if it needed
}

関連例: E3234 - インプレース エディターの値が変更された直後に行のスタイルを更新する方法

于 2013-07-26T06:07:34.833 に答える
1

ユーザーがセルの値を編集したら、UI を変更したいと思いませんか? 一般に、CellValueChanged イベントの処理をあきらめる必要があると思いますが、代わりに CellValueChanging イベントを使用します。

疑似コード:

HandleCellValueChanging(object sender, CellValueChangingEventArgs e) 
{
   // Get underlying object
   // and write the value direct into the object
   var rowObj = (YourType)gridview.GetRow(gridView.FocusedRowHandle);
   rowObj.TargetField = e.NewValue; // e.Value or e.NewValue, not sure

   // Then Do your UI effect
}

もう 1 つのオプションは、RepositoryItemEditor を使用して、代わりにキーアップおよび/またはマウスアップイベントを処理することです。

于 2013-07-26T05:29:06.467 に答える