|
.NET TIPS [ASP.NET]データベースからリッチなメニューを作成するには?[2.0のみ、C#、VB]山田 祥寛2006/03/31 |
![]() |
|
|
|
「TIPS:[ASP.NET]データベースからツリーメニューを作成するには?」でも紹介したように、.NET Frameworkではサーバ・コントロールから出来合いの機能を利用するばかりではない。ナビゲーションAPIを利用することで、例えばデータベース上のデータをTreeViewコントロールにバインドするような操作も容易に実現できる。
そしてもちろん、ナビゲーションAPIで操作できるのはTreeViewコントロールばかりではない。代表的なナビゲーション・コントロールであるMenuコントロールでも同様の操作が可能だ。そこで本稿では、データベース上で管理されたメニュー情報からMenuコントロールを使ってよりリッチなメニューを生成する方法を紹介する。なお、本稿のサンプル・プログラムを利用するには、データベース上に前掲のTIPSでも紹介したsitemapテーブル(と中身のデータ)を用意しておく必要がある。
それではさっそく、具体的な構築の手順をVisual Studio 2005(以降、VS 2005)環境を前提に見ていくことにしよう。
1. Menuコントロールを配置する
最初に、フォーム・デザイナからMenuコントロールを配置する。Menuコントロールを利用するための主な操作は、Menuコントロールを配置すると(もしくは右上の三角マーク
をクリックすると)表示される[Menu タスク]メニューを選択することで行えるが、ここでは[オートフォーマット]を選択し、メニューの外観だけを整えておく。いくつかデフォルトのフォーマットが用意されているが、ここでは「プロフェッショナル」を選択している。
![]() |
| [オートフォーマット]ダイアログ |
| このダイアログは、Menuコントロールの[Menu タスク]メニューから[オートフォーマット]を選択すると表示される。ここでは「プロフェッショナル」を選択している。 |
「TIPS:[ASP.NET]Webフォーム上でサイト・メニュー/サイト・パスを作成するには?」のようにMenuコントロールに対してサイトマップ・ファイル(Web.sitemap)をバインドする場合には、ここで[Menu タスク]メニューの[データ ソースの選択]コンボボックスから「<新しいデータソース...>」を選択すればよい。ただし本稿ではデータベースからデータをバインドするので、ここでは特に何も行わない。
以上で、メニューの外観にかかわる設定は完了だ。ここで参考までにVS 2005によって自動生成されたコードを引用しておく(ただし、<%--〜--%>は筆者コメント)。
|
|
| VS 2005によって自動生成されたソース・コード(C#版:menuDb_cs.aspx/VB版:menuDb_vb.aspx)の抜粋 | |
| なお本稿では、MenuコントロールのIDは「menu」とした。 |
2. メニューにデータを展開する
もっとも、これだけではただのメニューの外見を定義したにすぎないので、ページがロードされたタイミングで、データベースからあらかじめ用意しておいたメニュー情報を読み込み、Menuコントロールに展開する必要がある。
以下は、その具体的なコードだ。なお、環境によって変動する可能性があるデータベース接続文字列を個々の.aspxファイルにハード・コーディングすることは好ましくない。ここではデータベース接続文字列は、構成ファイル(Web.config)上であらかじめ定義されているものとする(接続文字列の定義に関する詳細は、別稿「VS 2005で変革されたASP.NET、Windowsフォーム、ADO.NETを総覧」の「接続文字列は構成ファイルに」をご参照いただきたい)。
|
||
| データベースから動的にメニューを生成するWebフォーム(上:menu_db_cs.aspx/下:menu_db_vb.aspx) |
コードの構造は、「TIPS:[ASP.NET]データベースからツリーメニューを作成するには?」とほとんど同様だ(併せて参考にしていただきたい)。
CreateItemメソッドの第2パラメータに指定されたMenuItemCollectionオブジェクト(Microsoft.Web.UI.WebControls名前空間)に対してAddメソッドを呼び出すことで、メニュー項目を順に追加していく。もしも該当する項目に下位のノードが存在する場合には、CreateItemメソッドは再帰的に呼び出され、最下位のノードまでが順に処理されるというわけだ。
以上を理解したら、さっそく、サンプル・プログラムを実行してみよう。
![]() |
| サンプル・プログラム(menuDb_cs.aspx/menuDb_vb.aspx)の実行結果 |
データベースに格納した内容に従って、以下のような結果を得られれば成功だ。![]()
| 利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Webフォーム 処理対象:ナビゲーション 使用ライブラリ:Menuコントロール(Microsoft.Web.UI.WebControls名前空間) 使用ライブラリ:MenuItemCollectionクラス(Microsoft.Web.UI.WebControls名前空間) 関連TIPS:[ASP.NET]データベースからツリーメニューを作成するには? 関連TIPS:[ASP.NET]Webフォーム上でサイト・メニュー/サイト・パスを作成するには? |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




