VB.NET コンボボックスで検索候補表示機能を実装する

VB.NETアプリのコンボボックスで、入力した文字が含まれる候補のみを表示する機能を実装。
所謂サジェスト検索的なものに近いか。

@あらかじめ、コンボボックスのリストとなる要素をDataTableで作成しておく。
(DataTableには"ITEM"というカラムがあるものとする)

A次に、それらの要素DataTableのDataViewを作成し、コンボボックスのテキストが変化するたびに、DataViewをフィルタリングし、要素を絞っていく。

B最後に、Aで絞った要素を、コンボボックスのデータソースとして追加し、リスト表示する。

というやり方を採った。


Private Sub ComboBox1_TextUpdate(sender As Object, e As EventArgs) Handles ComboBox1.TextUpdate
    '入力された文字列で検索条件をつくる
    Dim w As String = "ITEM LIKE '%" & ComboBox1.Text & "%'"
    Dim dv = New DataView(comboDt) 'comboDtはコンボボックスの全件リスト
    dv.RowFilter = w

    '候補を絞った結果を格納する
    Dim comboDt2 = New DataTable
    comboDt2.Columns.Add("ITEM", Type.GetType("System.String"))
    For Each drv As DataRowView In dv
     comboDt2.ImportRow(drv.Row)
    Next

    'コンボボックスに候補を絞った結果をセット
    ComboBox1.DataSource = comboDt2

    '候補を表示
    ComboBox1.DroppedDown = True

End Sub



正しいやり方かはわからないが、概ねこんな感じ。
また、上記のままだと、テキスト入力するたびにカーソルが文字列の頭に戻ってしまうので、逐一それを調整する作業も必要になる。



posted by へっぽ at 00:46 | TrackBack(0) | VB.NET | このブログの読者になる | 更新情報をチェックする

この記事へのトラックバック