0

別のフォームを表示させるフォームがあります。

Activated最初のフォームのイベントは、現在DataGridView.

で行の選択を保持するにはどうすればよいDataGridViewですか? のリフレッシュDataGridViewにより、最初の行が選択されます。

のデータはDataGridView、次のように更新されます。

MyDataGridView.DataSource = getDataTableFromDb();

where をgetDataTableFromDb()返しますDataTable

4

1 に答える 1

1

これを解決するには、おそらく - が必要になるでしょうBindingSource。これを持たない理由は実際には何もないので、問題ではありません。

BindingSource他のコントロールと同様に、コントロールをフォームのデザイン サーフェイスにドラッグするだけです。

次にDataTable、バインディング ソースのデータ ソースを作成し、バインディング ソースをグリッドのデータ ソースにします。

バインディング ソースを設定するコードは非常に単純です。

bindingSource1.DataSource = getDataTableFromDb();
MyDataGridView.DataSource = bindingSource1;

これはあなたの問題を解決するのに十分かもしれません. (私はそれが特定のシナリオで動作するのを見てきました)


位置がまだ維持されていない場合は、バインディング ソースを使用してFindおよびPositionメンバーを使用できるようになりました。

まず、再バインドする直前に、現在選択されている項目に関する固有の情報を取得する必要があります。通常、データベースの主キー。

Currentこれは、次のようなバインディング ソースのプロパティから取得できます。

DataRowView r = bs.Current as DataRowView;
var id = int.Parse(r.Row.ItemArray[0].ToString());

次に、この ID を使用して、グリッドを再バインドした後、次のようになります。

int index = bs.Find("CustomerId", 3);
bs.Position = index;

上記の「CustomerId」プロパティは、データ テーブルで使用する主キー列を表す name プロパティです。


注意すべき重要な点の 1 つは、これが機能するのは、データ ソース (DataTable がそのまま使用できる検索をサポートしているため) だけであるということです。BindingList のようなものに変更する場合は、FindCore メンバーを自分で実装する必要があります。

于 2012-09-28T13:43:16.720 に答える