DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewで、バインドしたDTから抽出した行のみ表示させることはできますか

環境/言語:[WindowsXP SP2 VB2005 EE]
分類:[.NET]

いつもお世話になっております。

DataGridViewに、メモリ上に作ったDataTableをバインドして表示しています。
(DataTableの内容はCSVファイルからロードしたものです。)

この状態ではDataTableのレコードは全件表示されていますが、
キーワードで抽出したレコードのみ動的に切り替えて表示させられるようにしたいです。

現在の知識で思いつく方法は、新しくDataTableを宣言し、
元のDataTableから検索抽出した行のみインポートし、
DataGriDviewのソースを切り替えて表示するという方法だけでした。

'------------------------------------------------
'レコードを検索抽出して配列に入れる
Dim foundRows() As DataRow = MainDT.Clone.Select("列名" & " Like '*" & キーワード & "*'")

'抽出結果を格納するDataTableを作る
Dim newDT as New DataTable
'メインのDataTableの構造を引き継ぐ
newDT = MainDT.Clone

'抽出したレコードを、新規DataTableにインポート
For Each row As DataRow In foundRows
  newDT.ImportRow(row)
Next

'DataGridViewのソースを切り替える
DataGridView1.DataSource = newDT
'------------------------------------------------

現状でもよいのですが、
DataGridViewから行を編集したり削除したりする場合に、
毎回2つのDataTableを操作しなければならないことと、
検索するたびに、同じレコードを持つDataTableがたくさん作られていっては
非効率ですしリソースもたくさん使うのではないかと心配です。
縮小画像を入れるイメージ型の列もあるので大きくなりそうです。
(検索結果が用済みになるたびに、DTをDisposeすればいいのでしょうか?)

1つのDataTableから、表示させたい行のみを選んで
DataGridViewに表示させる方法がありましたらご教授頂きたく思います。

よろしくお願いいたします。
[いきなり余談]
DT ってなんだろう、とかふと思ったりしました。DataTable のことかしら…と文脈で
判断してみましたが、個人的には DT と言われると「え?童貞?」とか思っちゃうような
人間なので、オレオレ用語は勘弁していただきたいかなと。
(エイトロン、と答える人もいるかもしれませんが)
[/いきなり余談]

さて本題ですが。

DataView について調べてみてください。
■No21610に返信(ぽぴ王子さんの記事)
> [いきなり余談]
> DT ってなんだろう、とかふと思ったりしました。DataTable のことかしら…と文脈で
> 判断してみましたが、個人的には DT と言われると「え?童貞?」とか思っちゃうような
> 人間なので、オレオレ用語は勘弁していただきたいかなと。
> (エイトロン、と答える人もいるかもしれませんが)
> [/いきなり余談]
>
> さて本題ですが。
>
> DataView について調べてみてください。


すみません。
タイトルが長くなってしまい、なんとなく省略してしまいました。

DataViewクラスについて調べてみました。
便利なものがあるのだろうとは思っていたのですが、やはり!
恥ずかしながらDataGridViewに直接DataTableをバインドする方法しか知らなかったので、
DataViewのおかげでずいぶんコードが簡略化できそうです。

本当にどうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板