- PR -

[C#][VS2005] DataGridViewに検索を!

1
投稿者投稿内容
ベテラン
会議室デビュー日: 2005/05/16
投稿数: 85
お住まい・勤務地: 千葉県在住
投稿日時: 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アプリ
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-12 15:01
引用:

梶さんの書き込み (2006-12-12 14:16) より:

できればループを使用せずに実現したいと考えています。


DataGridView の Cell を直接検索するならば、NCL で用意されていようとそうなると思いますよ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ベテラン
会議室デビュー日: 2005/05/16
投稿数: 85
お住まい・勤務地: 千葉県在住
投稿日時: 2006-12-13 08:22
じゃんぬさん。早速のお返事ありがとう御座います。

引用:

じゃんぬねっとさんの書き込み (2006-12-12 15:01) より:

DataGridView の Cell を直接検索するならば、NCL で用意されていようとそうなると思いますよ。



やっぱり、ループ処理するしかないのですね。
DataGridView上の検索アプリを、最終的にはCell入力後の重複チェックにも
使用できるように発展させようと考えていたのですが・・・。
※CellVaridatedイベント毎にループをまわす事を考えると、行数が
 増えた時に負荷がかかってしまいそうで・・・

[ メッセージ編集済み 編集者: 梶 編集日時 2006-12-13 08:24 ]
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-12-13 09:10
引用:

梶さんの書き込み (2006-12-13 08:22) より:

DataGridView上の検索アプリを、最終的にはCell入力後の重複チェックにも
使用できるように発展させようと考えていたのですが・・・。

※CellVaridatedイベント毎にループをまわす事を考えると、行数が
 増えた時に負荷がかかってしまいそうで・・・


同値の重複チェックということなら、別スレッドで HashTable で別途値を管理するように細工すればループを回す必要は無い気がします。

それに、仮に検索機能がDataGridViewそのものにあったとしても、結局内部的にループを回して高速にアクセスしているだけなので、ご自身で高速にアクセスできるように細工することと同じレベルの問題だと思うのですが・・・

http://www.google.co.jp/search?hl=ja&q=B%E6%9C%A8&lr=

これを使って作ってみるのが楽しそう・・・
_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-12-13 09:38
表示する DataTable の DataView を DataSource にした BindingSource 使えば色々できそうですが。
ま、負荷についてはむしろより大きくなるだけでしょうけどね。
// 利便性とコストは往々にしてトレードオフの関係。
ベテラン
会議室デビュー日: 2005/05/16
投稿数: 85
お住まい・勤務地: 千葉県在住
投稿日時: 2006-12-13 18:48
R・田中一郎さん、Hongliangさん、こんにちは。

引用:

R・田中一郎さんの書き込み (2006-12-13 09:10) より:

それに、仮に検索機能がDataGridViewそのものにあったとしても、結局内部的にループを回して高速にアクセスしているだけなので、ご自身で高速にアクセスできるように細工することと同じレベルの問題だと思うのですが・・・



仰るとおりです(><)
HashTableについては、使った事が無かったので、調べてみようと思います。

引用:

Hongliangさんの書き込み (2006-12-13 09:38) より:

表示する DataTable の DataView を DataSource にした BindingSource 使えば色々できそうですが。



実は、BindingSourceにFindがある事を知りませんでしたw
でも、これってindexを返すだけなので、複数重複があったら・・・って考えたときに挫折してしまいました。

取り敢えず、DataGridViewのRowsをループする方法と、HashTableを利用する方法とで検討しようと思います。
1

スキルアップ/キャリアアップ(JOB@IT)