フィルタ
データテーブル内に格納されているデータに対してフィルタをかけることができます。この機能により、特定の情報を含む行のみを取り出すということも可能になります。
DataTableオブジェクトにはSelect()メソッドがあります。これを使ってフィルタをかけることができます。リファレンスで戻り値を調べてみましょう。DataRow型の配列を用意しておく必要があります。
例を挙げましょう。M_ユーザーテーブルの中の氏名列に、「名倉」という情報を持ったレコードを抽出するフィルタを指定しましょう。その場合、
[DataTable].Select("氏名 LIKE '名倉'")
と、引数を与えることができます。SQL文でのWHERE句の条件を引数としてセットすることにより、フィルタをかけることができます。
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 |
Windows フォーム アプリケーション |
プロジェクト名 |
FilterTest |
サンプルダウンロード
○ フォームデザイン
次の図のようにコントロールを配置してください。
コントロールの配置例
○ プログラム
次のように各イベントプロシージャを記述してください。
Form1.vb
- 'データテーブルオブジェクトを作成する
- Dim dt As New DataTable
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- '接続文字列を作成する
- Dim con_string As String = _
- "Data Source=.;AttachDbFilename=C:¥Work¥Books.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
- 'コネクションオブジェクトを作成する
- Dim con As New SqlClient.SqlConnection(con_string)
- 'SQL文を生成する
- Dim sql As String = "SELECT * FROM M_ユーザー"
- 'アダプタオブジェクトを作成する
- Dim ad As New SqlClient.SqlDataAdapter(sql, con)
- 'データテーブルとデータベースを同期させる
- ad.Fill(dt)
- 'DataGridViewとDataTableを関連付ける
- Me.DataGridView1.DataSource = dt
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- '対象の列を格納する変数
- Dim data() As DataRow
- data = dt.Select("氏名 LIKE '" & Me.TextBox1.Text & "'")
- Me.TextBox2.Text = data(0).Item("ユーザーID")
- End Sub
○ 実行結果
実行結果
Selectメソッドの引数にフィルタを指定します。結果が複数の行のことがありますので、その情報をDataRowの配列に格納するわけです。今回は、初めにヒットした項目を表示しています。DataRow配列に格納されている最初の行の「ユーザーID」を表示します。
前へ 次へ