.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」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|