これを解決するには、おそらく - が必要になるでしょう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 メンバーを自分で実装する必要があります。