フィルタ

 データテーブル内に格納されているデータに対してフィルタをかけることができます。この機能により、特定の情報を含む行のみを取り出すということも可能になります。

 DataTableオブジェクトにはSelect()メソッドがあります。これを使ってフィルタをかけることができます。リファレンスで戻り値を調べてみましょう。DataRow型の配列を用意しておく必要があります。

 例を挙げましょう。M_ユーザーテーブルの中の氏名列に、「名倉」という情報を持ったレコードを抽出するフィルタを指定しましょう。その場合、

   [DataTable].Select("氏名 LIKE '名倉'")

 と、引数を与えることができます。SQL文でのWHERE句の条件を引数としてセットすることにより、フィルタをかけることができます。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 Windows フォーム アプリケーション
プロジェクト名 FilterTest

サンプルダウンロード

○ フォームデザイン

 次の図のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

○ プログラム

 次のように各イベントプロシージャを記述してください。

Form1.vb

  1. 'データテーブルオブジェクトを作成する
  2. Dim dt As New DataTable
  3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.  '接続文字列を作成する
  5.  Dim con_string As String = _
  6.   "Data Source=.;AttachDbFilename=C:¥Work¥Books.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
  7.  'コネクションオブジェクトを作成する
  8.  Dim con As New SqlClient.SqlConnection(con_string)
  9.  'SQL文を生成する
  10.  Dim sql As String = "SELECT * FROM M_ユーザー"
  11.  'アダプタオブジェクトを作成する
  12.  Dim ad As New SqlClient.SqlDataAdapter(sql, con)
  13.  'データテーブルとデータベースを同期させる
  14.  ad.Fill(dt)
  15.  'DataGridViewとDataTableを関連付ける
  16.  Me.DataGridView1.DataSource = dt
  17. End Sub
  18. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  19.  '対象の列を格納する変数
  20.  Dim data() As DataRow
  21.  data = dt.Select("氏名 LIKE '" & Me.TextBox1.Text & "'")
  22.  Me.TextBox2.Text = data(0).Item("ユーザーID")
  23. End Sub

○ 実行結果

実行結果
実行結果

 Selectメソッドの引数にフィルタを指定します。結果が複数の行のことがありますので、その情報をDataRowの配列に格納するわけです。今回は、初めにヒットした項目を表示しています。DataRow配列に格納されている最初の行の「ユーザーID」を表示します。

前へ   次へ