相変わらず VisualBasic の話。
やりたかったことは、例えば
○ 全部表示○ カテゴリAの商品だけ表示○ カテゴリBの商品だけ表示
みたいなラジオボタンがあって、それを選択することで、そのボタンの内容に見合った一覧を DataGridView に表示したいということ。
DataGridView には BindingSource 経由で DataView の内容がバインドされている。
方法としては、何の検索(絞込)も行っていない状態の DataView をローカル変数で保持しておいて、「カテゴリBの商品だけ表示」ラジオボタンがチェックされたら、
- ローカル変数に保持していた全件が含まれた DataView を新しい DataView にコピー
- その新しい DataView で「カテゴリBの商品だけ」を検索(絞込)
- その結果を、BindingSource.DataSource にセット
という処理をするだけ。
で、この時、「ローカル変数に保持していた全件が含まれた DataView を新しい DataView にコピー」の部分を、
Dim newDsv As DataView = BaseDsv(←ローカル変数で保持してる DataView)
みたいに書いてはいけません・・・ということなんじゃね(^^;
これ、BaseDsv を newDsv に代入するって意味じゃなくて、newDsv と BaseDsv を関連付けるって意味なのね(^^;
これで、
Dim newDsv As DataView = BaseDsvnewDsv.RowFilter = "category = 'a'"
なんてやっちゃうと、BaseDsv の中身も RowFilter で絞り込んだ後の内容になっちゃう(^^;
こういう時は、
Dim newDsv New DataViewnewDsv.Table = BaseDsv.Table.Copy()newDsv.RowFilter = "category = 'a'"
ってやらなきゃダメ。
これで、newDsv だけが絞りこまれた内容になって、BaseDsv の内容は元のまま残る。
VB.NET の仕様というより、オブジェクト指向的な問題やね(^^;
こういう発見が日々あって楽しいんだけど、おかげでプログラミングは遅れ気味な今日このごろであった・・・(^^;;;;
電気ウナギ的○○
About Backコメント(0)
電気ウナギ的○○