電気ウナギ的○○

About Home

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

shinoda (2014年9月12日 22:45)
相変わらず 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 の仕様というより、オブジェクト指向的な問題やね(^^;

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

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3102

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE