チュートリアル : FormView Web サーバー コントロールによる Web ページでの書式設定したデータの表示
更新 : 2007 年 11 月
ASP.NET には、データ レコードの表示と編集を実行するためのさまざまなコントロールが用意されています。このチュートリアルでは、一度に 1 つのデータ レコードに対して機能する FormView コントロールを使用して作業します。FormView コントロールの主な機能は、テンプレートを定義して、レコードのレイアウトを作成できる機能です。テンプレートを操作することによって、コントロール内のデータのレイアウトと外観を完全に制御できます。FormView コントロールでもデータ レコードの編集、挿入、削除などの更新がサポートされます。データ ソースが FormView コントロールに複数のレコードを提供する場合、このコントロールにより、レコードを個別にページ化できます。
メモ : |
---|
データの定義済みレイアウトを提供する DetailsView コントロールを使用して個別のデータ レコードを編集することもできます。詳細については、「DetailsView Web サーバー コントロールの概要」を参照してください。 |
このチュートリアルでは、以下のタスクを行います。
マスター情報または詳細情報を表示するためのページの作成
データ レコードのフリーハンド レイアウトを作成するための FormView コントロールの使用
編集できるようにするための FormView コントロールの設定
前提条件
このチュートリアルを実行するための要件は次のとおりです。
Microsoft Visual Web Developer
SQL Server Northwind データベースへのアクセス。SQL Server の Northwind サンプル データベースをダウンロードし、インストールする方法については、Microsoft SQL Server の Web サイトの「サンプル データベースのインストール」を参照してください。
メモ : SQL Server が実行されているコンピュータにログオンする方法については、サーバー管理者にお問い合わせください。
MDAC (Microsoft Data Access Components) Version 2.7 以降
Microsoft Windows XP または Windows Server 2003 を使用している場合、MDAC 2.7 は既に存在します。ただし、Microsoft Windows 2000 を使用している場合は、コンピュータに既にインストールされている MDAC のアップグレードが必要になる場合があります。詳細については、MSDN ライブラリの「Microsoft Data Access Components (MDAC) Installation」を参照してください。
Web サイトの作成
次の手順に従って、新しい Web サイトおよびページを作成します。
ファイル システム Web サイトを作成するには
Visual Web Developer を開きます。
[ファイル] メニューの [新規作成] をポイントし、[Web サイト] をクリックします。Visual Web Developer Express を使用している場合は、[ファイル] メニューの [新しい Web サイト] をクリックします。
[新しい Web サイト] ダイアログ ボックスが表示されます。
[Visual Studio にインストールされたテンプレート] の [ASP.NET Web サイト] をクリックします。
[場所] ボックスに、Web サイトのページを格納するフォルダの名前を入力します。
たとえば、「C:\WebSites\FormViewData」というフォルダ名を入力します。
[言語] ボックスで、作業に使用する言語をクリックします。
[OK] をクリックします。
Visual Web Developer によりフォルダが作成され、Default.aspx という名前の新しいページが作成されます。
マスターとしてのドロップダウン リストの使用
チュートリアルのこのセクションでは、ページにドロップダウン リストを追加して、その中に製品名の一覧を設定します。ユーザーが製品を選択すると、そのページの FormView コントロール内に製品の詳細情報が表示されます。
ドロップダウン リストを作成して値を設定するには
Default.aspx ページに切り替えるか開きます。作成済みの Web サイトを使用して作業する場合、このチュートリアルで作業できるページを追加するか、開きます。
デザイン ビューに切り替えます。
ページに「Display Product Information」と入力します。
ツールボックスの [標準] グループから、DropDownList コントロールをページにドラッグします。
[DropDownList タスク] メニューが表示されない場合は、DropDownList コントロールを右クリックし、[スマート タグの表示] をクリックします。
[DropDownList タスク] メニューの [AutoPostBack を有効にする] チェック ボックスをオンにします。
[データ ソースの選択] をクリックしてデータ ソース構成ウィザードを起動します。
[データ ソースの選択] ボックスで、[<新しいデータ ソース>] をクリックします。
[データベース] をクリックします。
これにより、SQL ステートメントをサポートするデータベースからデータを取得することが指定されます。
[データ ソースに ID を指定します] ボックスに、既定のデータ ソース コントロール名が表示されます。この名前はそのままにしておいてかまいません。
[OK] をクリックします。
接続を選択できるページがウィザードによって表示されます。
[新しい接続] をクリックします。
[接続の追加] ダイアログ ボックスが表示されます。
[データ ソース] ボックスに [Microsoft SQL Server (SqlClient)] が表示されない場合は、[変更] をクリックして、[データ ソースの変更] ダイアログ ボックスの [Microsoft SQL Server] を選択します。
[データ ソースの選択] ページが表示された場合は、[データ ソース] ボックスから使用するデータ ソースの種類を選択します。このチュートリアルでは、データ ソースの種類は [Microsoft SQL Server] です。[データ プロバイダ] ボックスの [.NET Framework SQL Server 用データ プロバイダ] をクリックし、[続行] をクリックします。
[接続の追加] ダイアログ ボックスで以下の作業を行います。
[サーバー名] ボックスに SQL Server を実行中のコンピュータの名前を入力します。
ログオン資格情報として、実行中の SQL Server データベースにアクセスするための適切なオプション (統合セキュリティまたは特定の ID とパスワード) を選択し、必要に応じてユーザー名とパスワードを入力します。パスワードを入力した場合は、[パスワードの保存] チェック ボックスをオンにします。
[データベースの選択または入力] をクリックし、「Northwind」と入力します。
[接続の確認] をクリックし、接続が機能している場合は、[OK] をクリックします。
接続情報が表示されたウィザードに戻ります。
[次へ] をクリックします。
[はい、この接続を次の名前で保存します] チェック ボックスがオンになっていることを確認し、[次へ] をクリックします (既定の接続文字列名はそのままにしておいてかまいません)。
ウィザードに、データベースから取得するデータを指定するためのページが表示されます。
[テーブルまたは表示から列を指定します] をクリックします。
[コンピュータ] ボックスの [Products] をクリックします。
[列] の下の [ProductID] と [ProductName] を選択します。
[次へ] をクリックします。
[クエリのテスト] をクリックし、必要なデータが取得されることを確認します。
[完了] をクリックします。
ウィザードに戻ります。
[DropDownList で表示するデータ フィールドの選択] ボックスの [ProductName] をクリックします。
[DropDownList の値のデータ フィールドの選択] ボックスの [ProductID] をクリックします。
これにより項目が選択されると、ProductID フィールドが項目の値として返されます。
[OK] をクリックします。
次に進む前に、ドロップダウン リストをテストします。
ドロップダウン リストをテストするには
Ctrl キーを押しながら F5 キーを押してページを実行します。
ページが表示されたら、ドロップダウン リストを調べます。
製品名を 1 つ選択し、リストでポストバックが実行されることを確認します。
FormView コントロールの追加
次に、製品の詳細情報を表示する FormView コントロールを追加します。FormView コントロールは、ページに追加した第 2 のデータ ソース コントロールからデータを取得します。第 2 のデータ ソース コントロールには、現在 DropDownList コントロールで選択されている項目の製品レコードを取得するパラメータ化されたクエリが含まれます。
FormView コントロールを追加するには
ツールボックスの [データ] グループから、FormView コントロールをページにドラッグします。
[FormView タスク] メニューが表示されない場合は、FormView コントロールを右クリックし、[スマート タグの表示] をクリックします。
[FormView タスク] メニューの [データ ソースの選択] ボックスで、[<新しいデータ ソース>] をクリックします。
[データ ソース構成ウィザード] ダイアログ ボックスが表示されます。
[データベース] をクリックします。
FormView コントロールは、同じテーブルから DropDownList コントロールとしてデータを取得します。
[データ ソースに ID を指定します] ボックスに、既定のデータ ソース コントロール名が表示されます。この名前はそのままにしておいてかまいません。
[OK] をクリックします。
データ ソースの構成ウィザードが起動します。
[アプリケーションがデータベースへの接続に使用するデータ接続] ボックスに、このチュートリアルの前半で作成して格納した接続の名前を入力します。
[次へ] をクリックします。
SQL ステートメントを作成できるページがウィザードによって表示されます。
[テーブルまたは表示から列を指定します] の下にある [コンピュータ] ボックスの [Products] をクリックします。
[列] ボックスの [ProductID]、[ProductName]、および [UnitPrice] を選択します。
[Where] ボタンをクリックします。
[WHERE 句の追加] ダイアログ ボックスが表示されます。
[列] ボックスの [ProductID] をクリックします。
[演算子] ボックスの [=] をクリックします。
[ソース] ボックスの [コントロール] をクリックします。
[パラメータのプロパティ] の下にある [コントロール ID] ボックスの [DropDownList1] をクリックします。
最後の 2 つの手順では、このクエリが前に追加済みの DropDownList コントロールから製品 ID の検索値を取得することを指定します。
[追加] をクリックします。
[OK] をクリックして、[WHERE 句の追加] ダイアログ ボックスを閉じます。
[次へ] をクリックします。
[SQL 生成の詳細オプション] ダイアログ ボックスが表示されます。
[INSERT、UPDATE、および DELETE ステートメントの生成] チェック ボックスをオンにします。
このオプションを選択すると、設定してある Select ステートメントに基づいてウィザードが SQL 更新ステートメントを作成します。このチュートリアルの後半では、FormView コントロールを使用して、レコードの編集と挿入を実行します。これらの操作を実行するには、データ ソース コントロール内に更新ステートメントを指定する必要があります。
[OK] をクリックします。
[次へ] をクリックします。
[プレビュー] ページの [クエリのテスト] をクリックします。
ウィザードによって、WHERE 句で使用する値の指定を求めるダイアログ ボックスが表示されます。
[値] ボックスに「4」と入力し、[OK] をクリックします。
製品情報が表示されます。
[完了] をクリックします。
FormView コントロール内のレイアウトのカスタマイズ
FormView コントロールを使用する理由は、表示するレコードのレイアウトを定義できることです。チュートリアルのこのセクションでは、テンプレートを編集してレコードのレイアウトをカスタマイズします。レイアウトについては、HTML テーブルを使用します。
レイアウトを書式設定するには
FormView コントロールをクリックして選択し、このコントロールの右側にあるサイズ変更ハンドルをドラッグして、このコントロールを現在のページと同じ幅に広げます。
コントロールの下部にあるサイズ変更ハンドルをドラッグし、このコントロールの高さを約 400 ピクセルに変更します (高さを厳密に指定する必要はありません)。
コントロールを右クリックし、[テンプレートの編集] をクリックして、[ItemTemplate] をクリックします。
コントロールが項目テンプレート編集モードで再表示されます。項目テンプレートには、ページの実行時にデータ レコードの表示に使用する静的テキストやコントロールが格納されています。既定では、Visual Web Developer によってデータ ソースのデータ列ごとに項目テンプレートにデータ バインド Label コントロールが読み込まれます。また、Visual Web Developer によって、キャプションとして機能する静的テキストがラベルごとに生成されます。
このテンプレートは、3 つの LinkButton コントロール (テキストの [編集]、[削除]、および [新規作成]) に対しても生成されます。
項目テンプレートの最上部にカーソルを合わせ、Enter キーを 2、3 回押して空白を挿入して、見出しとして機能する「Product Details」をこのテンプレートの最上部に入力します。
コントロールと静的テキストの下にカーソルを合わせ、[テーブル] メニューの [テーブルの挿入] をクリックします。
HTML テーブルをテキストとコントロールのコンテナとして作成します。
[テーブルの挿入] ダイアログ ボックスで、[行] を 4 に設定し、[列] を 2 に設定します。
[OK] をクリックして、[テーブルの挿入] ダイアログ ボックスを閉じます。
テーブル内のすべてのセルを選択し、[テーブル] メニューの [セルの書式] をクリックします。
[セルのプロパティ] ダイアログ ボックスが表示されます。
[幅] を 35 ピクセル (px) に設定し、[高さ] を 30 ピクセル (px) に設定します。
[OK] をクリックして [セルのプロパティ] ダイアログ ボックスを閉じます。
ProductIdLabel コントロールを右側の最上部にあるセルにドラッグします。
ProductNameLabel コントロールを右側の上から 2 番目にあるセルにドラッグします。
UnitPriceLabel コントロールを右側の上から 3 番目にあるセルにドラッグします。
左側の列で、Label コントロールのキャプションとして機能する静的テキストを入力します。たとえば、ProductIdLabel コントロールの隣にあるセルに「ID」と入力します。キャプション テキストは自由に入力できます。
左側の列を右クリックし、[選択] をクリックして [列] をクリックします。
[プロパティ] ウィンドウで [整列] を right に設定してキャプション テキストを右揃えにします。
右側の列を選択し、右側の境界線をドラッグして、長い製品名を表示できるだけの幅にテーブルを広げます。
Visual Web Developer で生成されたテキスト (テキスト「ProductID」など) を選択し、削除します。
FormView コントロールのタイトル バーを右クリックし、[テンプレート編集の終了] をクリックします。
テンプレート エディタが閉じ、作成したレイアウトでコントロールが表示されます。
FormView コントロールのテスト
ここでレイアウトをテストできます。
FormView コントロールをテストするには
Ctrl キーを押しながら F5 キーを押してページを実行します。
DropDownList コントロールで製品名をクリックします。
FormView コントロールによって製品の詳細情報が表示されます。
別の製品を選択し、FormView コントロールによってその製品の詳細情報が表示されることを確認します。
ブラウザを閉じます。
FormView コントロールへの編集機能と挿入機能の追加
FormView コントロールでは、個別のレコードの表示だけでなく、編集、削除、および挿入の各操作がサポートされます。
チュートリアルのこのセクションでは、現在表示されているレコードを編集する機能を追加します。レコードを編集するには、テキスト ボックス (または他のコントロール) を含む別のテンプレートを定義します。
FormView コントロールに編集機能を追加するには
FormView コントロールを右クリックし、[テンプレートの編集] をクリックして、[EditItemTemplate] をクリックします。
テンプレート エディタが開き、EditItemTemplate プロパティが表示されます。このテンプレートでは、コントロールが編集モードである場合のレコードのレイアウト方法を定義します。Visual Web Developer によって、編集テンプレートにキーでないデータ列ごとに TextBox コントロールが読み込まれ、キャプションの静的データが追加されます。これは、項目テンプレートの生成方法と似ています。ただし、編集テンプレートでは、Visual Web Developer によってテキスト ボックスが生成されます。
前と同様に、このテンプレートは編集中の変更を保存および廃棄するための [更新] および [キャンセル] の各 LinkButton コントロールについても生成されます。
また、このチュートリアルの前半で項目テンプレートについて作業したのと同様に、レイアウト テーブルの追加やコントロールの配置替えを行うこともできます。
FormView コントロールを右クリックし、[テンプレートの編集] をクリックして、[InsertItemTemplate] をクリックします。
EditItemTemplate プロパティについては、Visual Web Developer によってラベルと TextBox コントロールのテンプレート レイアウトが自動的に作成されます。これらのコントロールは、ユーザーが新しいレコードを Products テーブルに挿入するときに表示されます。このテンプレートは、[挿入] および [キャンセル] の各 LinkButton コントロールについても生成されます。
また、編集項目テンプレートについて作業したのと同様に、レイアウト テーブルの追加やコントロールの配置替えを行うこともできます。
FormView コントロールを右クリックし、[テンプレート編集の終了] をクリックします。
セキュリティに関するメモ : ASP.NET Web ページのユーザー入力には、悪意のあるクライアントのスクリプトが含まれている可能性があります。既定では、ASP.NET Web ページは、ユーザー入力にスクリプトまたは HTML 要素が含まれていないことを検証します。この検証が有効の場合は、ユーザー入力にスクリプトや HTML 要素が含まれているかどうかを明示的に確認する必要はありません。詳細については、「スクリプトによる攻略の概要」を参照してください。
編集と挿入のテスト
ここでは編集と挿入をテストできます。
FormView コントロールの編集機能をテストするには
Ctrl キーを押しながら F5 キーを押してページを実行します。
DropDownList コントロールで製品を選択します。
製品の詳細情報が FormView コントロール内に表示されます。
[編集] をクリックします。
FormView コントロールが編集モードに切り替わります。
製品名または単価を変更します。
[更新] をクリックします。
レコードが保存され、FormView コントロールが表示モードに切り替わります。変更が表示に反映されます。
別の製品を選択します。
[編集] をクリックします。
製品名を変更します。
[キャンセル] をクリックします。
変更が保存されていないことを確認します。
FormView コントロールの挿入機能をテストするには
FormView コントロールの [新規作成] をクリックします。
FormView コントロールが挿入モードに切り替わり、空のテキスト ボックスが 2 つ表示されます。
新しい製品名と価格を入力して、[挿入] をクリックします。
レコードがデータベースに保存され、FormView コントロールが表示 (ItemTemplate) ビューに切り替わります。
メモ : ドロップダウン リストには新しいレコードは表示されません。この機能は次のセクションで追加します。
ドロップダウン リストでの更新済み製品名の再表示
ここまでで、Products データベース テーブル内のレコードの表示、編集、または削除機能がページに設定されています。ただし、ドロップダウン リストは FormView コントロールに加えた変更と同期していません。たとえば、新しい Products レコードを挿入した場合、ページを閉じて再度開くまでドロップダウン リストには新しいレコードが表示されません。また、ページが開くと、まず Products テーブルの最初のレコードが表示されるため、不便な場合があります。
コードを追加して、これらの軽度の問題を修正できます。チュートリアルのこのセクションでは、次の作業を行います。
ユーザーがレコードを編集または挿入した場合は必ずドロップダウン リストを更新する。
ページが表示されたらテキスト "(Select)" をドロップダウン リストに追加して、ユーザーが最初の選択を行ったらそのテキストを削除する。
レコードの編集時または挿入時にドロップダウン リストを更新するには
ページのデザイン ビューで FormView コントロールを選択します。
[プロパティ] ウィンドウの [イベント] をクリックし、FormView コントロールのイベント一覧を表示します。
[ItemInserted] ボックスをダブルクリックします。
Visual Web Developer がコード編集ビューに切り替わり、ItemInserted イベントのハンドラが作成されます。
次の強調表示されたコードをイベント ハンドラに追加します。
Protected Sub FormView1_ItemInserted(ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.FormViewInsertedEventArgs) _ Handles FormView1.ItemInserted DropDownList1.DataBind() End Sub
[C#]
protected void FormView1_ItemInserted(object sender, FormViewInsertedEventArgs e) { DropDownList1.DataBind(); }
新しいレコードが挿入された後でコードが実行されます。ドロップダウン リストが Products テーブルに再度バインドされ、一覧のコンテンツが更新されます。
デザイン ビューに切り替えます。分離コード ページを使用して作業している場合は、Default.aspx ページに切り替えてから、デザイン ビューに切り替えます。
[プロパティ] ウィンドウの [イベント] ボタンをクリックし、FormView コントロールのイベント一覧を表示します。
[ItemUpdated] ボックスをダブルクリックします。
Visual Web Developer がコード編集ビューに切り替わり、ItemUpdated イベントのイベント ハンドラが作成されます。
次の強調表示されたコードを追加します。
Protected Sub FormView1_ItemUpdated(ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.FormViewUpdatedEventArgs) _ Handles FormView1.ItemUpdated DropDownList1.DataBind() End Sub
[C#]
protected void FormView1_ItemUpdated(object sender, FormViewUpdatedEventArgs e) { DropDownList1.DataBind(); }
レコードが更新された後でコードが実行されます。ドロップダウン リストが Products テーブルに再度バインドされ、一覧のコンテンツが更新されます。
Ctrl キーを押しながら F5 キーを押してページを実行します。
レコードの製品名を編集し、[更新] をクリックします。ドロップダウン リストを調べて、更新した名前が表示されることを確認します。
新しい製品レコードを挿入し、[挿入] をクリックします。ドロップダウン リストを調べて、新しい名前が一覧に追加されていることを確認します。
最後の手順では、"(Select)" が表示されるように、およびユーザーが選択を行ったときだけに FormView コントロールが表示されるように、ドロップダウン リストを変更します。
DropDownList コントロールに Select エントリを追加するには
デザイン ビューでページの空白部分をダブルクリックします。
Visual Web Developer により、ページの Load イベントのイベント ハンドラが作成されます。
ハンドラに次の強調表示されたコードを追加します。
[Visual Basic]
Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then FormView1.Visible = False End If End Sub
[C#]
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { FormView1.Visible = false; } }
ページを実行すると、コードが実行されます。このコードでは、まずこのページ操作がポストバックであるかどうかが確認されます。ポストバックでない場合は、ページが初めて実行されたことを表します。このページ操作がポストバックでない場合、このコードによって FormView コントロールが表示されません。これは、ユーザーがレコードの表示または編集を明示的に選択した場合だけにこのコントロールを表示するためです。
ページのデザイン ビューで DropDownList コントロールを選択します。
[プロパティ] ウィンドウの [Items] ボックスの省略記号 ([...]) をクリックします。
[ListItem コレクション エディタ] ダイアログ ボックスが表示されます。
[追加] をクリックして、新しい項目を作成します。
[ListItem プロパティ] の下にある [テキスト] ボックスに「(Select)」と入力します。
[OK] をクリックして [ListItem コレクション エディタ] ダイアログ ボックスを閉じます。
[プロパティ] ボックスで、AppendDataBoundItems を true に設定します。
データ バインディング中にドロップダウン リストに値を読み込むと、定義した (Select) 項目に製品情報が追加されます。
[プロパティ] ウィンドウの [イベント] ボタンをクリックし、DropDownList コントロールのイベント一覧を表示します。
[SelectedIndexChanged] ボックスをダブルクリックします。
次の強調表示されたコードを追加します。
[Visual Basic]
Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender _ As Object, ByVal e As System.EventArgs) _ Handles DropDownList1.SelectedIndexChanged If DropDownList1.Items(0).Text = "(Select)" Then DropDownList1.Items.RemoveAt(0) End If FormView1.Visible = True End Sub
[C#]
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { if(DropDownList1.Items[0].Text == "(Select)") { DropDownList1.Items.RemoveAt(0); } FormView1.Visible = true; }
ユーザーが DropDownList コントロール内の項目を選択すると、このコードが実行されます。ユーザーが初めて項目を選択した後は、項目を選択するようにユーザーに要求する必要がないので、先ほど追加した "(Select)" 項目 (存在するかどうかを最初にチェックする) が削除されます。このコードでは、ユーザーが選択したレコードを確認できるように、FormView コントロールも表示されたままになります (非表示になりません)。
Ctrl キーを押しながら F5 キーを押してページを実行します。
ページには、"(Select)" という語句を含むドロップダウン リストだけが表示されます。
一覧にある項目を選択します。
項目は FormView コントロールに表示されます。
ドロップダウン リストを調べ、"(Select)" という語句が一覧に表示されないことを確認します。
次の手順
このチュートリアルでは、FormView コントロールとカスタム レイアウトを使用して個別のデータ レコードを表示および編集するための基本的な手順について説明しています。FormView コントロールを使用すると、このチュートリアルで実行した書式設定よりも高度な書式設定を実行できます。また、レコードと共に表示するヘッダーやフッターに対して、選択モードや挿入モードなど、他のモードのテンプレートを作成することもできます。FormView についてさらに学習するには、次のセクションを参照してください。
FormView Web サーバー コントロールのテンプレートの作成
FormView Web サーバー コントロールを使用したデータの変更