チュートリアル : カスタム ビジネス オブジェクトへのデータ バインディング
更新 : 2007 年 11 月
多くの Web アプリケーションは、複数の層を使用して構成されており、中間にデータ アクセス用のコンポーネントを持つ層があります。Microsoft Visual Web Developer では、中間層のデータ オブジェクトとして使用可能なデータ コンポーネントを作成するためのウィザードが提供されています。これについては、「チュートリアル : Visual Studio データ コンポーネントによる Web ページのデータ バインディング」で説明されています。
ユーザーは、このウィザードで作成されたデータ コンポーネントとは別のカスタムのビジネス オブジェクトの作成を必要とすることがあります。カスタムのビジネス オブジェクトを使用すると、ユーザー自身のビジネス ロジックを実装できます。このチュートリアルでは、ASP.NET で作成する Web ページでデータ ソースとして使用するための、基本的なビジネス オブジェクトを作成する方法について説明します。
このチュートリアルでは、次の作業を行う方法について説明します。
Web ページにデータを返すコンポーネントを作成します。このコンポーネントは、データとして XML ファイルを使用します。
ビジネス オブジェクトを Web ページ上のデータ ソースとして参照します。
コントロールをビジネス オブジェクトが返すデータにバインドします。
ビジネス オブジェクトを使用してデータの読み取りと書き込みを行います。
前提条件
このチュートリアルを実行するための要件は次のとおりです。
Visual Web Developer (Visual Studio)
.NET Framework
このチュートリアルは、読者が Visual Web Developer の使用方法に関する一般的な知識を持っていることを前提としています。
Web サイトの作成
「チュートリアル : Visual Web Developer での基本的な Web ページの作成」などの手順に従って既に Visual Web Developer を使用して Web サイトを作成済みの場合、その Web サイトを利用できるので、次のセクションの「ビジネス データ用の XML ファイルの作成」に進んでもかまいません。それ以外の場合は、次の手順に従って、新しい Web サイトおよびページを作成します。
ファイル システム Web サイトを作成するには
Visual Web Developer を開きます。
[ファイル] メニューの [新しい Web サイト] をクリックします。
[新しい Web サイト] ダイアログ ボックスが表示されます。
[Visual Studio にインストールされたテンプレート] の [ASP.NET Web サイト] をクリックします。
[場所] ボックスに、Web サイトのページを格納するフォルダの名前を入力します。
たとえば、フォルダ名として「C:\WebSites」と入力します。
[言語] ボックスで、作業に使用する言語をクリックします。
[OK] をクリックします。
Visual Web Developer によりフォルダが作成され、Default.aspx という名前の新しいページが作成されます。
ビジネス データ用の XML ファイルの作成
次の手順を実行すると、ビジネス コンポーネント データに使用するための簡単な XML ファイルを作成できます。
XML ファイルを作成するには
ソリューション エクスプローラで、[App_Data] を右クリックし、、[新しい項目の追加] の順にクリックします。
メモ : XML ファイルは、必ず [App_Data] フォルダに作成してください。[App_Data] フォルダには、Web ページがデータを読み取り、XML ファイルに書き込むためのアクセス許可が設定されています。
[Visual Studio にインストールされたテンプレート] の [XML ファイル] をクリックします。
[プロジェクト名] ボックスに「Authors.xml」と入力します。
[追加] をクリックします。
XML ディレクティブだけを含む新しい XML ファイルが作成されます。
次の XML データをコピーし、ファイルに貼り付けて、ファイルの内容を上書きします。
この XML ファイルには、キーの主キー制約などの、データのデータベース構造を示すスキーマ情報が含まれています。
メモ : ビジネス コンポーネントは、ユーザーのアプリケーションに適した方法でデータを処理できます。このチュートリアルでは、XML ファイルを使用します。
<?xml version="1.0" standalone="yes"?> <dsPubs xmlns="http://www.tempuri.org/dsPubs.xsd"> <xs:schema id="dsPubs" targetNamespace="http://www.tempuri.org/dsPubs.xsd" xmlns:mstns="http://www.tempuri.org/dsPubs.xsd" xmlns="http://www.tempuri.org/dsPubs.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:element name="dsPubs" msdata:IsDataSet="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="authors"> <xs:complexType> <xs:sequence> <xs:element name="au_id" type="xs:string" /> <xs:element name="au_lname" type="xs:string" /> <xs:element name="au_fname" type="xs:string" /> <xs:element name="au_phone" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:unique name="Constraint1" msdata:PrimaryKey="true"> <xs:selector xpath=".//mstns:authors" /> <xs:field xpath="mstns:au_id" /> </xs:unique> </xs:element> </xs:schema> <authors> <au_id>172-32-1176</au_id> <au_lname>West</au_lname> <au_fname>Paul</au_fname> <au_phone>408 555-0123</au_phone> </authors> <authors> <au_id>213-46-8915</au_id> <au_lname>Gray</au_lname> <au_fname>Chris</au_fname> <au_phone>415 555-0120</au_phone> </authors> </dsPubs>
Authors.xml ファイルを保存して、閉じます。
コンポーネントの作成
次の手順では、ビジネス コンポーネントとして使用するクラスを作成します。作成したコンポーネントは、Web サイトの [App_Code] フォルダに保存しておきます。ただし、実際のアプリケーションでは、コンポーネントをグローバル アセンブリ キャッシュ、またはその他の任意のストアに保存してかまいません。ユーザーの Web サイトに、[App_Code] という名前のフォルダがなければ、新しく作成してください。
[App_Code] フォルダを作成するには
ソリューション エクスプローラで、ユーザーの Web サイト名を右クリックし、[ASP.NET フォルダの追加]、[App_Code] の順にクリックします。
メモ : フォルダ名は、必ず [App_Code] としてください。
これで、サイトにコンポーネントを追加する準備が整いました。
ビジネス コンポーネントを作成するには
ソリューション エクスプローラで、[App_Code] フォルダを右クリックし、、[新しい項目の追加] をクリックします。
メモ : 新規アイテムは、必ず [App_Code] フォルダに作成してください。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[Visual Studio にインストールされたテンプレート] の [クラス] をクリックします。
[言語] ボックスで、使用するプログラミング言語をクリックします。
[プロジェクト名] ボックスに「BusinessObject」と入力します。
[追加] をクリックします。
Visual Web Developer によって新しいクラス ファイルが作成され、コード エディタが開きます。
次のコードをコピーし、ファイルに貼り付けて、ファイルの内容を上書きします。
Imports Microsoft.VisualBasic Imports System Imports System.Web Imports System.Data Namespace PubsClasses Public Class AuthorClass Private dsAuthors As DataSet = _ New System.Data.DataSet("ds1") Private filePath As String = _ HttpContext.Current.Server.MapPath _ ("~/App_Data/authors.xml") Public Sub New() dsAuthors.ReadXml(filePath, Data.XmlReadMode.ReadSchema) End Sub Public Function GetAuthors() As DataSet Return dsAuthors End Function End Class End Namespace
using System; using System.Web; using System.Data; namespace PubsClasses { public class AuthorClass { private DataSet dsAuthors = new DataSet("ds1"); private String filePath = HttpContext.Current.Server.MapPath ("~/App_Data/Authors.xml"); public AuthorClass() { dsAuthors.ReadXml (filePath, XmlReadMode.ReadSchema); } public DataSet GetAuthors () { return dsAuthors; } } }
メモ : filePath 変数の値が、作成された XML ファイル名を参照していることを確認します。
新しいクラスのインスタンスが作成されると、そのインスタンスに XML ファイルが読み取られ、データセットに変換されます。このクラスの GetAuthors メソッドがデータセットを返します。
ファイルを保存します。このファイルは、次のセクションの作業に使用するので、必ず保存しておきます。
ビジネス コンポーネントを使用したデータの表示
次に、ビジネス コンポーネントを Web ページで起動し、そのデータを表示します。このコンポーネントを参照するには、オブジェクトを操作するためだけに作成された ObjectDataSource コントロールを使用します。
コンポーネントを参照する ObjectDataSource コントロールを作成するには
Default.aspx ページに切り替えるか開きます。
メモ : Default.aspx ページがない場合は、別のページを使用してもかまいません。または、Web サイトに新しいページを追加できます。ソリューション エクスフローラで Web サイトの名前を右クリックし、[新しい項目の追加] をクリックして、[Web フォーム] を追加します。
デザイン ビューに切り替えます。
ツールボックスの [データ] フォルダから、ObjectDataSource コントロールをページにドラッグします。
[プロパティ] ウィンドウで、[ID] を AuthorsObjectDataSource に設定します。
[ObjectDataSource] コントロールを右クリックし、次にスマート タグをクリックして、[ObjectDataSource タスク] メニューを表示します。
[ObjectDataSource タスク] メニューの [データ ソースの構成] をクリックします。
データ ソースの構成ウィザードが表示されます。
[ビジネス オブジェクトの選択] ボックスの [PubsClasses.AuthorClass] をクリックします。
[次へ] をクリックします。
[SELECT] タブで、[メソッドの選択] ボックスの [GetAuthors()、戻り値 DataSet] をクリックします。
既に作成したビジネス クラスに [GetAuthors] メソッドが定義されます。このメソッドは、Authors.xml ファイルから、該当データを含むデータセットを返します。
[完了] をクリックします。
コンポーネントからデータを取得するため、入力した構成情報にはコンポーネントの GetAuthors メソッドを呼び出すよう指定されています。
メモ : Visual Basic .NET でプログラムを作成する場合でも、SelectMethod プロパティに指定したメソッド名の大文字と小文字は区別されます。
これで、ObjectDataSource コントロールを使用してコンポーネントからデータを取得できます。データは、Web ページの GridView コントロールに表示されます。
コンポーネントからデータを表示するには
ツールボックスの [データ] フォルダから、[GridView] コントロールをページにドラッグします。
[GridView タスク] メニューが表示されない場合は、[GridView] コントロールを右クリックし、次にスマート タグをクリックします。
[GridView タスク] メニューの [データ ソースの選択] ボックスの [AuthorsObjectDataSource] をクリックします。
Ctrl キーを押しながら F5 キーを押してページを実行します。
XML データを含む [GridView] コントロールが表示されます。
ビジネス コンポーネントによるデータの挿入
ObjectDataSource コントロールは、SqlDataSource コントロールなどの他のデータ ソース コントロールと同様に、更新 (挿入、更新、および削除) をサポートします。このセクションでは、作成者のレコードを挿入するメソッドを使用して、ビジネス コンポーネントを変更します。次に、ユーザーが新しい作成者情報を入力し、ObjectDataSource コントロールを変更して挿入できるようにページを変更します。
メモ : |
---|
チュートリアルのこの部分を実行すると、既に作成した Authors.xml ファイルが更新されます。アプリケーションには、実行時にファイルへの書き込みを行うアクセス許可が設定されていることが重要です。この許可が設定されていないと、ファイルを更新しようとしたときに Web ページにエラーが表示されます。Authors.xml ファイルを [App_Data] フォルダに作成した場合は、このアクセス許可は自動的に設定されます。 |
ビジネス コンポーネントを挿入できるように変更するには
BusinessObject ファイルに切り替えます。
次のメソッドを AuthorClass の最終メンバとして追加します。
Public Sub InsertAuthor(ByVal au_id As String, _ ByVal au_lname As String, _ ByVal au_fname As String, ByVal au_phone As String) Dim workRow As DataRow = dsAuthors.Tables(0).NewRow workRow.BeginEdit() workRow(0) = au_id workRow(1) = au_lname workRow(2) = au_fname workRow(3) = au_phone workRow.EndEdit() dsAuthors.Tables(0).Rows.Add(workRow) dsAuthors.WriteXml(filePath, Data.XmlWriteMode.WriteSchema) End Sub
public void InsertAuthor (String au_id, String au_lname, String au_fname, String au_phone) { DataRow workRow = dsAuthors.Tables[0].NewRow (); workRow.BeginEdit (); workRow[0] = au_id; workRow[1] = au_lname; workRow[2] = au_fname; workRow[3] = au_phone; workRow.EndEdit (); dsAuthors.Tables[0].Rows.Add (workRow); dsAuthors.WriteXml (filePath, XmlWriteMode.WriteSchema); }
メモ : 作成者情報をメソッドに渡すための変数名 (au_id、au_lname、au_fname、および au_phone) には注意が必要です。これらの名前は、既に作成した XML ファイルのスキーマで定義した列名と一致している必要があります。
新しいメソッドでは、挿入する値が 4 つ必要となります。こうした値は、ページでパラメータとして指定します。このメソッドは、データセットに新しい行を作成し、更新されたデータセットを XML ファイルとして書き出します。
ファイルを保存します。
次の手順では、ユーザーが新しい作成者情報を入力できるようにページを変更します。次のプロシージャには、DetailsView コントロールを使用します。
データを挿入するためのコントロールを追加するには
Default.aspx ページに切り替えるか開きます。
デザイン ビューに切り替えます。
ツールボックスの [データ] フォルダから、[DetailsView] コントロールをページにドラッグします。
メモ : ページに詳細なレイアウトを行う必要はありません。
[DetailsView タスク] メニューの [データ ソースの選択] ボックスの [AuthorsObjectDataSource] をクリックします。
メモ : [DetailsView タスク] メニューが表示されない場合は、スマート タグをクリックします。
[プロパティ] ウィンドウで、[AutoGenerateInsertButton] を true に設定します。
これにより、[DetailsView] コントロールに [新規作成] ボタンが作成され、ユーザーがこれをクリックすると、このコントロールがデータ入力モードに切り替わります。
最後に、データを挿入するために実行するアクションを指定できるように、ObjectDataSource コントロールを構成する必要があります。
データを挿入できるようにデータ ソース コントロールを構成するには
[AuthorsObjectDataSource] を右クリックし、[プロパティ] をクリックし、次に [InsertMethod] を「InsertAuthor」に設定します。
これは、ビジネス コンポーネントに追加したメソッド名です。
これで、新しい作成者を XML ファイルに挿入できるようになりました。
挿入のテストを行うには
Ctrl キーを押しながら F5 キーを押して Default.aspx ページを実行します。
[DetailsView] コントロールで、[新規作成] ボタンをクリックします。
コントロールが再表示され、テキスト ボックスが表示されます。
新しい作成者情報を入力し、[挿入] をクリックします。
新しい作成者情報が XML ファイルに追加されます。[GridView] コントロールに、直ちに新しいレコードが反映されます。
次の手順
このチュートリアルでは、データ コンポーネントの取り扱い方法を説明します。ナビゲーションの別の機能を試すこともできます。たとえば、次の場合です。
機能を追加、更新、または削除します。この操作を行うには、コンポーネントにメソッドを追加する必要があります。この操作は挿入ロジックの追加に似ています。メソッドをコンポーネントに追加し、コンポーネント メソッドを起動するようデータ ソース コントロールを構成し、適切なパラメータを追加して、最後にデータ ソース コントロールの Update メソッドおよび Delete メソッドを呼び出すコード行を追加します。詳細については、「チュートリアル : DetailsView Web サーバー コントロールによる Web ページのデータの編集と挿入」を参照してください。
ビジネス コンポーネントを XML ファイルではなく、データベースのデータを処理するよう変更します。Web ページ上のコントロールは何も変更する必要はありません。
データを変更できるユーザーを制限します。よく使用されるのは、メンバシップとロールを Web サイトに追加してから、ルールを確立する方法です。このルールには、データの変更を許可する前にビジネス コンポーネントが検査できることが定められている必要があります。詳細については、「チュートリアル : メンバシップとユーザー ログインを使用する Web サイトの作成」および「チュートリアル : ロールによる Web サイトユーザーの管理」を参照してください。
参照
処理手順
チュートリアル : Visual Studio データ コンポーネントによる Web ページのデータ バインディング
チュートリアル : Visual Web Developer の Web サイトでの共有コードの使用
チュートリアル : Visual Web Developer での基本的な Web ページの作成