検索
連載

第4回 データセットを使ったデータベース・アクセス基礎解説 ADO.NET基礎講座 ―初めての.NETデータベース・プログラミング―(3/4 ページ)

ADO.NETの中心的機能であるデータセットを丁寧に解説。Webアプリケーションで必要とされるDBアクセスのモデルがデータセットにある。

Share
Tweet
LINE
Hatena

DataGridコントロールによるデータセットの表示(Windowsフォーム版)

 さて、ここまででデータアダプタを利用してデータセットにレコードを読み込む手順を示した。残るプロセスは、データセットに読み込まれたレコードにアクセスすることだ。ここからは取得したデータセット内のデータの表示について見ていこう。

 データセットのデータを単純に表示するだけなら、DataGridコントロールを使用するのが最も便利な方法だ。DataGridコントロールはグリッド形式(表形式)でデータを表示するためのコントロールで、データセットとペアで使用されることを前提に設計されており、データセットと非常に親和性がよい。

 .NET Frameworkには標準でWindowsフォーム用と、Webフォーム用の2種類のDataGridコントロールが用意されている。データを表示させるだけならどちらも簡単なので、両方でやってみよう。

 まずWindowsフォーム版では、プログラムは次のようになる。先ほどのデータセットを利用したデータベース・アクセスの処理はMakeDataSetメソッドとしてまとめている。

// windg.cs

using System;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

public class DataGridForm : Form {

  public DataGridForm(DataSet ds) {
    DataGrid dg = new DataGrid();
    dg.Dock = DockStyle.Fill;
    this.Controls.Add(dg);

    dg.DataSource = ds;
  }
}

public class ShowDataGrid {

  static DataSet MakeDataSet() {

    string sqlStr = "SELECT pub_id, pub_name FROM publishers";

    string connStr = "Server=(local)\\NetSDK;"
                   + "Trusted_Connection=yes;"
                   + "database=pubs";

    SqlDataAdapter da = new SqlDataAdapter(sqlStr, connStr);

    DataSet ds = new DataSet();
    da.Fill(ds);

    return ds;
  }

  public static void Main() {
    DataSet ds = MakeDataSet();
    Application.Run(new DataGridForm(ds));
  }
}

// コンパイル方法:csc /t:winexe windg.cs

WindowsフォームのDataGridコントロールでデータセットを表示するサンプル・プログラム
サンプル・プログラム(windg.cs)のダウンロード

 このプログラムを実行すると次のようなウィンドウ(図中の左上のウィンドウ)が表示され、2回のクリックで取得されたレコードを表示することができる。


サンプル・プログラム(windg.cs)の実行結果
最初に一番左上のウィンドウが開く。レコードの内容を表示させるには、(1)(2)の部分をマウスでクリックしていく。

 このプログラムでは、ウィンドウ全面にDataGridコントロールを貼り付けている。データセットに関してポイントとなる部分は次の1行だけだ。

dg.DataSource = ds;

 この行では、DataGridオブジェクトのDataSourceプロパティにレコードを読み込んだDataSetオブジェクトをセットしている。これだけでDataGridコントロールはデータセットの内容を解釈し、列名付きでレコードを表示してくれる(この処理は「データ連結」と呼ばれる)。

 なお、2回クリックしないとレコード表示までたどり着かないのは、複数のテーブル(DataTableオブジェクト)を保持するデータセットの表示にDataGridコントロールが対応しているためだ。上記の行を次のように変更すれば、最初からDataGridコントロールにレコードが表示される。

dg.DataSource = ds.Tables[0];

 右辺のds.Tables[0]は、DataSetオブジェクト内にあるDataTableオブジェクトを直接指定しているわけだが、これについては後述する。DataGridコントロールのDataSourceプロパティは、データの読み込み先としてDataTableオブジェクトを指定することもできる。

DataGridコントロールによるデータセットの表示(Webフォーム版)

 一方、WebフォームでDataGridコントロールを使用して、データセットを表示させるプログラムは次のようなものになる。

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<html>
<head>
  <script runat="server">

    static DataSet MakeDataSet() {

      string sqlStr = "SELECT pub_id, pub_name FROM publishers";

      string connStr = "Server=(local)\\NetSDK;"
                     + "Trusted_Connection=yes;"
                     + "database=pubs";

      SqlDataAdapter da = new SqlDataAdapter(sqlStr, connStr);

      DataSet ds = new DataSet();
      da.Fill(ds);

      return ds;
    }

    void Page_Load(object s, EventArgs e) {
      DataGrid1.DataSource = MakeDataSet();
      DataGrid1.DataBind();
    }

  </script>
</head>

<body>
  <form runat="server">
    <asp:DataGrid id="DataGrid1" runat="server"
        EnableViewState="false"
        HeaderStyle-BackColor="#aaaadd" />
  </form>
</body>
</html>

WebフォームのDataGridコントロールでデータセットを表示するサンプル・プログラム
サンプル・プログラム(webdg.aspx)のダウンロード

 このプログラムは、IISのドキュメント・ルート(c:\inetpub\wwwrootなど)にコピーして、ブラウザから「http://localhost/webdg.aspx」を開けば実行されるはずだ。

 実行画面は次のようになる。


サンプル・プログラム(webdg.aspx)の実行結果
列名部分が見やすくなるように、DataGridコントロールのHeaderStyle-BackColor属性を設定している。

 プログラムでは、フォームが表示されるときに自動的に呼び出されるPage_Loadメソッドでデータ連結を行っている。

void Page_Load(object s, EventArgs e) {
  DataGrid1.DataSource = MakeDataSet();
  DataGrid1.DataBind();
}

 DataSourceプロパティにデータセットを指定するのはWindowsフォーム版と同様だが、Webフォーム版のDataGridコントロールでは、これに続いてDataBindメソッドの呼び出しが必要になる。このメソッドを呼び出した時点でデータ連結が行われる。

 なお、Webフォーム版のDataGridコントロールでは、データセット内に複数のDataTableオブジェクトがある場合には、上記のような記述では自動的に最初のDataTableオブジェクトが選択されるようだ。通常はDataSourceプロパティにDataTableオブジェクトを直接指定したり、DataMemberプロパティによりDataTableオブジェクトの名前を指定したりする。DataTableオブジェクトの名前については後述する。

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る