- - PR -
[C#][VS2005] DataGridViewに検索を!
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-12 14:16
こんにちは。
DataSetをバインドさせたDataGridViewとTextBoxを貼り付けているフォームを 想像して下さい。 このTextBoxに入力された値を、DataGridView上で検索し、該当するセルに フォーカスを当てるといった単純なアプリを作ろうとしています。 しかし、DataGridView自身には、検索機能が見当たらず難航しています。 TextBoxに入力された値が存在するかは、下記のような方法で判断する事は できました。 string input_data = this.textBox1.Text; DataRow[] foundRows = ((DataSet)this.dataGridView1.DataSource).Table[0].Select(検索条件) if(foundRows != null) ・・・・ しかし、この方法では、DataSet上にデータが存在するのは判断できても そのデータがDataGridView上の何処に存在しているのかまでは判断でき ません。 DataGridViewのRowsをグルグルまわせば、判断できるのは判るのですが できればループを使用せずに実現したいと考えています。 どなたか、良いアイデアをお持ちでしたら、是非教えて下さい。 [環境] VS.NET2005 C# Windowsアプリ | ||||||||
|
投稿日時: 2006-12-12 15:01
DataGridView の Cell を直接検索するならば、NCL で用意されていようとそうなると思いますよ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-12-13 08:22
じゃんぬさん。早速のお返事ありがとう御座います。
やっぱり、ループ処理するしかないのですね。 DataGridView上の検索アプリを、最終的にはCell入力後の重複チェックにも 使用できるように発展させようと考えていたのですが・・・。 ※CellVaridatedイベント毎にループをまわす事を考えると、行数が 増えた時に負荷がかかってしまいそうで・・・ [ メッセージ編集済み 編集者: 梶 編集日時 2006-12-13 08:24 ] | ||||||||
|
投稿日時: 2006-12-13 09:10
同値の重複チェックということなら、別スレッドで HashTable で別途値を管理するように細工すればループを回す必要は無い気がします。 それに、仮に検索機能がDataGridViewそのものにあったとしても、結局内部的にループを回して高速にアクセスしているだけなので、ご自身で高速にアクセスできるように細工することと同じレベルの問題だと思うのですが・・・ http://www.google.co.jp/search?hl=ja&q=B%E6%9C%A8&lr= これを使って作ってみるのが楽しそう・・・ _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||
|
投稿日時: 2006-12-13 09:38
表示する DataTable の DataView を DataSource にした BindingSource 使えば色々できそうですが。
ま、負荷についてはむしろより大きくなるだけでしょうけどね。 // 利便性とコストは往々にしてトレードオフの関係。 | ||||||||
|
投稿日時: 2006-12-13 18:48
R・田中一郎さん、Hongliangさん、こんにちは。
仰るとおりです(><) HashTableについては、使った事が無かったので、調べてみようと思います。
実は、BindingSourceにFindがある事を知りませんでしたw でも、これってindexを返すだけなので、複数重複があったら・・・って考えたときに挫折してしまいました。 取り敢えず、DataGridViewのRowsをループする方法と、HashTableを利用する方法とで検討しようと思います。 |
1