|
.NET TIPS [ASP.NET]DataGridコントロールでデータセットを表示するには?デジタルアドバンテージ2003/09/19 |
![]() |
|
|
|
ASP.NETのDataGridコントロールは、数あるWebサーバ・コントロールの中でも最も強力で、最も頻繁に使用されるコントロールだ。DataGridコントロールはデータをグリッド形式(表形式)で表示することができる。そして多くの場合、そのデータとしてはデータベースなどから取得したデータセットが使用される。データベースを基幹としたWebアプリケーション構築において、DataGridコントロールとデータセットの組み合わせはASP.NETの王道といってもよいだろう。
ここでは、データセットのデータをDataGridコントロールで表示するための基本的な記述についてまとめてみる。なお、データセットについての詳細は「連載:ADO.NET基礎講座」の「第4回 データセットを使ったデータベース・アクセス」などを参照していただきたい。
<asp:DataGrid>タグの記述
さて、Webページ内にDataGridコントロールを表示するにはまず、aspxファイルにおいて<form>タグ内に<asp:DataGrid>タグを記述する。<asp:DataGrid>タグはDataGridコントロールを表し、データ連結により最終的には表(HTMLの<table>要素)に置き換わるものである。
最もシンプルな<asp:DataGrid>タグの記述は次のようなものになる。
<form runat="server">
<asp:DataGrid id="MyGrid" runat="server" />
</form>
<asp:DataGrid>タグはサーバ側での処理が必要であるため、runat="server"属性が必須である(今回の例ではデータの表示のみであるため<form>タグについてはこの属性は不要であるが、今後の拡張のために記述しておく)。
また、DataGridコントロールをコードから参照/操作できるように、id="MyGrid"属性によりDataGridコントロールに「MyGrid」という名前を付けておく。
データソースの設定とデータ連結
DataGridコントロールにデータセットを表示するために次に必要となる作業は、コードによりDataGridコントロールのデータソース(DataSourceプロパティ)にデータセットを設定し、DataBindメソッドを呼び出してデータ連結を行うことだ。
ところで、runat="server"属性をつけて記述した<asp:DataGrid>タグは、aspxファイルがC#やVisual Basic .NETのソース・コードに変換され実行されるときには、DataGridクラス(System.Web.UI.WebControls名前空間)のインスタンスとなる。この際、id="MyGrid"属性により名前を付けているとすると、このインスタンスを参照するものとして変数「MyGrid」が使用される(「TIPS:[ASP.NET]ページから生成されたソース・コードを見るには?」にある手順でこれを実際に確認することができる)。
よって、コードからはDataGridオブジェクトである「MyGrid」に対してデータソースの設定とデータ連結を行えばよい。「ds」という変数名のデータセット(DataSetオブジェクト)に「item」という名前のデータテーブル(DataTableオブジェクト)が含まれているとすると、このためのコードは次のようになる。
MyGrid.DataSource = ds;
MyGrid.DataMember = "item";
MyGrid.DataBind();
1つのDataGridコントロールには1つの「表」しか表示できないため、データセットに複数のデータテーブルが含まれている場合は、そのうちの1つ指定することになる。DataMemberプロパティはその指定を行うためのものだ。
あるいは次のようにデータソースに直接データテーブルを指定してもよい。この場合にはDataMemberプロパティの設定は不要となる。
MyGrid.DataSource = ds.Tables["item"];
MyGrid.DataBind();
DataSourceプロパティに設定可能なオブジェクトは、IListSourceインターフェイス(System.ComponentModel名前空間)あるいはIEnumerableインターフェイス(System.Collections名前空間)を実装しているオブジェクトだ。ちなみに、DataSetクラスとDataTableクラスがIListSourceを実装するクラスである。
列を自動生成するDataGridコントロール
以上のコードを組み合わせたDataGridコントロールを使用する最もシンプルなプログラムは次のようなものになる。データセットの生成については、データベースを用いるとコードが少々長くなってしまうので、ここでは@ITのRSS情報を使用している(これについては後述)。このサンプル・プログラムはInsider.NETの新着記事15本を表示する。
|
|
| Insider.NETの新着記事15本を表示するC#のサンプル・プログラム(simpledg1.aspx) | |
サンプル・プログラムの実行結果は次のようになる。このサンプル・プログラムはここから実際に実行して試すことができる。
![]() |
| サンプル・プログラム(simpledg1.aspx)の実行結果 |
DataGridコントロールの表示についてはまったくのデフォルト設定だ。デフォルトでは、データソースにデータテーブルを指定した場合、そのデータテーブルに含まれる個々のカラムに対応してDataGridコントロールにカラムが自動生成される。このときDataGridコントロールのヘッダー行(一番上の行)にはデータテーブル内の各カラムの名前が使用される(正確にはDataTableオブジェクトに含まれるDataColumnオブジェクトのColumnNameプロパティの値)。
このようにカラムが自動生成されるのは、DataGridコントロールのAutoGenerateColumnプロパティがデフォルトでtrueとなっているためである。上記の実行画面を見て分かるように、カラム自動生成機能は実システムでは使い物にならない。このデフォルトの設定はテストやプロトタイプ・システムのためのものであるといえるだろう。テーブルの特定のカラムのみをDataGridコントロールで表示する方法については「TIPS:[ASP.NET]DataGridコントロールで特定のカラムのみを表示するには?」を見ていただきたい。
RSS情報をデータセットに読み込むには
RSS(RDF Site Summary)はWebサイトの更新情報をXMLで記述するための仕様である。@ITでも各フォーラムの新着記事についての情報を「RSSフィードについて」のページで提供している(RSSについての詳細は「特集:サイトの更新情報を提供する標準言語RSS」を参考にしていただきたい)。
RSS情報はXMLドキュメントなので、サンプル・プログラムで示しているようにDataSetクラスのReadXmlメソッドで簡単に読み込むことができる。
DataSet ds = new DataSet();
ds.ReadXml("http://www.atmarkit.co.jp/rss/fdotnet/rss2dc.xml");
@ITでは0.9、1.0、2.0の3つのバージョンのRSSを提供しているが、ここではRSS 1.0で記述されたデータを使用している。この場合には、ReadXmlメソッドの実行によりデータセット内に6つのデータテーブルが作成される。上記のサンプル・プログラムでは、この6つのデータテーブルうちの記事のタイトルや記事へのリンク、公開日時などを含んだ「item」という名前のデータテーブルを使用している。
サンプルとしてちょうどよいので、この6つのデータテーブルの一覧もDataGridコントロールで表示してみよう。これには、先ほどのサンプル・プログラム中のデータソースを設定している1行を次のように修正するだけだ。
MyGrid.DataSource = ds.Tables;
DataSetクラスのTablesプロパティの型であるDataTableCollectionクラス(System.Data名前空間)はIEnumerableインターフェイスを実装しているため、データソースとして設定可能だ。これによりTablesプロパティに含まれている各DataTableオブジェクトが表形式で表示される。
実行画面は次のようになる。
![]() |
| データソースをTablesプロパティに設定したサンプル・プログラム(simpledg2.aspx)の実行結果 |
この場合にもカラムの自動生成機能が働いているのが分かる。データソースがデータテーブルでない場合、DataGridコントロールはデータソースの各要素オブジェクトから基本的な型(プリミティブ型、string型、DateTime型など)のプロパティについてのみカラムを自動生成生成して、その値を表示する。![]()
| カテゴリ:Webフォーム 処理対象:DataGridコントロール 使用ライブラリ:DataGridコントロール 使用ライブラリ:DataGridクラス(System.Web.UI.WebControls名前空間) 使用ライブラリ:IListSourceインターフェイス(System.ComponentModel名前空間) 使用ライブラリ:IEnumerableインターフェイス(System.Collections名前空間) 使用ライブラリ:DataSetクラス(System.Data名前空間) 使用ライブラリ:DataTableクラス(System.Data名前空間) 使用ライブラリ:DataTableCollectionクラス(System.Data名前空間) 関連TIPS:[ASP.NET]ページから生成されたソース・コードを見るには? 関連TIPS:[ASP.NET]DataGridコントロールで特定のカラムのみを表示するには? |
| 「.NET TIPS」 |
TechTargetジャパン
- 複雑なデータをバインドするには? (2013/5/23)
複雑なデータ・クラスをコントロールにバインドする方法を解説。また、バインドしたコレクションの変更を反映させる方法も説明する - データ・コレクションをバインドするには? (2013/5/16)
Windowsストア・アプリやWindows Phone 8アプリで、データのコレクションをコントロールにバインドする方法を解説する - コントロール同士をデータ・バインドするには? (2013/5/9)
データ・バインドの仕組みを使うと、データ・クラスだけでなく、コントロール同士もバインドできる。その方法を説明する - 自動ビルドを実現するビルド・サービス環境の構築 (2013/5/8)
ソース・コードの管理環境の構築の次は、自動ビルド環境を構成しよう。Team Foundation Server Expressの機能を活用して簡単に構築
|
|
- TwilioとRailsで作る、電話でテキスト読み上げアプリ
- Java SE 8、Java EE 7、Java Embeddedはどうなる?
- 「Scalr」を使ったAWS管理を試す
- Google I/OでモバイルアプリUXの条件を考えた
- 秀丸スタートメニューで[スタート]ボタンを追加する
- Chrome拡張機能にpush通知をしよう
- データ分析に必要な「道具」を揃える
- 複雑なデータをバインドするには?
- LLMNRを使ったローカル・セグメント上での名前解決
- 「演算子のインジェクション」と「SSJI」
- DNSを使ってネットワークデバイスにホスト名で接続
- 「ポジションが上がる=マネージャ業務」ではない
キャリアアップ
- - PR -
イベントカレンダー
- - PR -
転職/派遣情報を探す
**先週の人気講座ランキング**
〜 Android編 〜
ホワイトペーパー(TechTargetジャパン)
「ITmedia マーケティング」新着記事
スマホ vs. タブレット、ユーザーの行動特性から考えるマーケティング戦略
これまで「PC対モバイルデバイス(スマートフォン/タブレット)」という図式で語られる...
リアルワールド、34万人のクラウドソーシングによるソーシャルリスニングサービスを開始
リアルワールドは5月23日、同社が提供する国内最大級のクラウドソーシングサービス「CROW...
Googleアナリティクスでテラバイト級のビッグデータ解析機能を提供――プレミアムユーザー限定
Google BigQueryは、2010年のGoogle I/Oで発表された、大量データセットの解析を実現する...




