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

フィルタ機能とワイルドカード

環境/言語:[vb.net 2003]
分類:[.NET]

初めて書き込ませて頂きます。
テキストボックスにキーを入力すると、そのレコードがdatagridに表示されるようなフィルタ機能を組もうとしまして、

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   dataTable1.DefaultView.RowFilter = "Key LIKE '" & Me.txtKey.Text & "'"
End Sub

とワイルドカードも受け付けるようにしました。そして次にキーが正しく入力されていないときにエラーメッセージが出る
ように以下のプログラムを組んだのですが、ワイルドカードを受け付けなくなってしまいました。
どのようにすればワイルドカードを受け付けるようになるのかよろしくお願いします。
-------------------------------------------------------------------------------------
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If txtKey.Text = "" Then
MsgBox("キーを入力して下さい。")
txtKey.Focus()
Else
Dim i As Integer
i = dataview1.Find(txtKey.Text)
If i > dataview1.Table.Rows.Count Or i < 0 Then
MsgBox("record not found", MsgBoxStyle.Information, "record not found")
Else
dataTable1.DefaultView.RowFilter = "Key LIKE '" & Me.txtKey.Text & "'"
End If
End If
 End Sub
--------------------------------------------------------------------------------------
> i = dataview1.Find(txtKey.Text)

Findメソッドが「一致する」行インデックスを求めるからです。
なのでワイルドカードは使えません。

> If i > dataview1.Table.Rows.Count Or i < 0 Then
> MsgBox("record not found", MsgBoxStyle.Information, "record not found")
> Else
> dataTable1.DefaultView.RowFilter = "Key LIKE '" & Me.txtKey.Text & "'"
> End If

dataview1が今回の判断のためのものなら、dataview1にRowFilterを設定して件数を判断すればよいのではないでしょうか。

> If i > dataview1.Table.Rows.Count Or i < 0 Then

件数はdataviewクラスのCountプロパティが使えるようです。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfsystemdatadataviewmemberstopic.asp

というわけで見た目を0件にしてもいいなら、RowFilterを設定してCount判断してってことでOKですが。


#データクラスは疎いので変なこと言ってたらフォロー願います>ALL
こんにちは。

> i = dataview1.Find(txtKey.Text)

まず、dataview1 がどこにも出てきていませんが、DataView 型として見ていいでしょ
うか。
DataView.Find メソッドは、指定したパラメータが DataVIew の元のテーブルの プライ
マリキー と一致する行のインデックスを返します。
この場合は dataTable1 になるのではないかと推測しますが、そのテーブルにプライ
マリキーは設定されているでしょうか。
されていなければ、このコードは意味をなさないような気がします。

あとはまどかさんがおっしゃられているのと同じように、dataview1 にフィルタを設定
してあげて、その Count プロパティを見ればいいんじゃないでしょうか。
一応
http://support.microsoft.com/default.aspx?scid=kb;ja;308070
http://www.atmarkit.co.jp/fdotnet/dotnettips/129dgfilter/dgfilter.html
を参考にしてやりました。
dataview1にRowFilterを設定するとは
 dataview1.RowFilter= "Key LIKE '" & Me.txtKey.Text & "'"
とすることでしょうか。
この投稿はマルチポストです。

●マルチポストされている場所
http://vbnet-iku2.hp.infoseek.co.jp/cgi-bin/treecrsdx01/index.cgi?m=look&bnum=3214

----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。

●書き込みのマナーについて
http://dobon.net/vb/bbs/index.html
誠に申し訳ございませんですた。
解決済み!

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