1

xtragridview から行をダブルクリックすると、そのアプリケーションで xtragridview コントロールのアプリケーションを開発しています。そのとき、1 つのポップアップ フォームが開きます。次に、親ウィンドウのフォーカスが変更され、フォーカスが popup である別のフォームに割り当てられます。そのとき、選択した行の状態が変化し、xtrgridview からデフォルトの最初の行にフォーカス/選択します。しかし、ユーザーがフォーカスをあるフォームから別のポップアップフォームに変更した場合、フォーカス/選択された行をそのまま維持したいと考えています。

このソリューションに解決策はありますか?この問題に対して、xtragridview コントロールのどのプロパティを設定する必要がありますか?

ありがとう.....

4

3 に答える 3

2

通常、使用しているアプローチでは、追加のコードを記述する必要はありません。グリッド行をダブルクリックしてフォームを開いた場合、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;
...
}
于 2011-04-03T12:52:01.003 に答える
0

方法 1:

ダブルクリックイベントハンドラーで言及するだけです

return;

すべてのプロセス(別のフォームのオープンなど)が完了した後。

あなたの質問をよりよく理解した後、方法 2を試すことをお勧めします。

方法 2:

別のフォームまたはダイアログを開く前に、まず現在選択されているインデックスを記録します。

int index = datagridview.SelectedRows[0].Index;  //or xdatagrid.SelectedRows[0].Index;**

次に、フォームを開くか、その他の手順が完了したら、次の行を追加します

datagridview.Rows[index].Selected = true; //or xdatagrid.Rows[index].Selected = true;**

**注: xdatagrid を使用したことはありませんが、datagridview の経験に応じて解決策を提案します。

于 2011-04-02T07:45:37.467 に答える
0

私が使う

 GridView view = (GridView) sender;
 Point pt = view.GridControl.PointToClient(Control.MousePosition);
 var info = DoRowDoubleClick(view, pt);

DoRowDoubleClick が次の場合:

 private static GridHitInfo DoRowDoubleClick(GridView view, Point pt) {

            GridHitInfo info = view.CalcHitInfo(pt);

            if (info.InRow || info.InRowCell){

                string colCaption = info.Column == null ? "N/A" : info.Column.GetCaption();

                MessageBox.Show(string.Format("DoubleClick on row: {0}, column: {1}.", info.RowHandle, colCaption));
                return info;
            }
            return null;
        }
于 2013-06-01T23:40:20.173 に答える