通常、使用しているアプローチでは、追加のコードを記述する必要はありません。グリッド行をダブルクリックしてフォームを開いた場合、XtraGrid は FocusedRow をリセットしません。したがって、この動作の原因を特定することをお勧めします。これは、次のアプローチを使用して行うことができます。
1) GridView の FocusedRowChanged イベントを処理し、それにブレークポイントを設定します。
2) 問題を再現し、どのコードが gridView を強制的に最初の行にフォーカスさせるかを確認します。
これにより、なぜこれが起こるのかについての考えが得られるはずです。
また、GridView で行を編集するための PopupForm の作成方法を確認し、列エディターに基づいてエディターを自動的に作成することをお勧めします。必要な機能が実装されている例。
私はこの問題の原因を知っていると思います。これは、DataView の RowFilter プロパティを変更しているためです。編集者がクリックされたレコードを指すようにしたいと思います。最善の解決策は、DataView をフィルター処理せずに、上記の例のように BindingContext を割り当てることです。そのコードは次のとおりです。
public EditForm(Point location, GridColumnCollection columns, object dataSource, BindingContext context)
: this() {
StartPosition = FormStartPosition.Manual;
Location = location;
BindingContext = context; // <<<<<<
allowTrackValueChanges = false;
this.dataSource = dataSource;
...
}