データビューのコピーには Copy メソッドを使わないとダメなのね

相変わらず 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 の仕様というより、オブジェクト指向的な問題やね(^^;

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

トラックバック(0)

このブログ記事を参照しているブログ一覧: データビューのコピーには Copy メソッドを使わないとダメなのね

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3102

コメントする

このブログ記事について

このページは、shinodaが2014年9月12日 22:45に書いたブログ記事です。

ひとつ前のブログ記事は「今日、初めて八木地区の被災状況を見た(遠くから)」です。

次のブログ記事は「「カレーをかけたうどん」ではなく、カレーうどんが食べたい」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら