データビューのコピーには Copy メソッドを使わないとダメなのね[プログラミング]
(2014-09-12 22:45:33) by shinoda


相変わらず VisualBasic の話。

やりたかったことは、例えば

○ 全部表示
○ カテゴリAの商品だけ表示
○ カテゴリBの商品だけ表示

みたいなラジオボタンがあって、それを選択することで、そのボタンの内容に見合った一覧を DataGridView に表示したいということ。

DataGridView には BindingSource 経由で DataView の内容がバインドされている。

方法としては、何の検索(絞込)も行っていない状態の DataView をローカル変数で保持しておいて、「カテゴリBの商品だけ表示」ラジオボタンがチェックされたら、

  1. ローカル変数に保持していた全件が含まれた DataView を新しい DataView にコピー
  2. その新しい DataView で「カテゴリBの商品だけ」を検索(絞込)
  3. その結果を、BindingSource.DataSource にセット

という処理をするだけ。

で、この時、「ローカル変数に保持していた全件が含まれた DataView を新しい DataView にコピー」の部分を、

Dim newDsv As DataView = BaseDsv(←ローカル変数で保持してる DataView)

みたいに書いてはいけません・・・ということなんじゃね(^^;
これ、BaseDsv を newDsv に代入するって意味じゃなくて、newDsv と BaseDsv を関連付けるって意味なのね(^^;

これで、

Dim newDsv As DataView = BaseDsv
newDsv.RowFilter = "category = 'a'"

なんてやっちゃうと、BaseDsv の中身も RowFilter で絞り込んだ後の内容になっちゃう(^^;

こういう時は、

Dim newDsv New DataView
newDsv.Table = BaseDsv.Table.Copy()
newDsv.RowFilter = "category = 'a'"

ってやらなきゃダメ。
これで、newDsv だけが絞りこまれた内容になって、BaseDsv の内容は元のまま残る。
VB.NET の仕様というより、オブジェクト指向的な問題やね(^^;

こういう発見が日々あって楽しいんだけど、おかげでプログラミングは遅れ気味な今日このごろであった・・・(^^;;;;

コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8