C# Programming

 

ImageDetailsView(ASP.NET 2.0 β)

開発環境: Visual Studio 2005


1.目次

1.目次
2.目的
3.参考書
4.DetailsView
5.DetailsViewのデザインの変更とページングの追加
6.DetailsViewでの画像の表示
7.DetailsViewへの編集、追加、削除機能の追加
8.インサート時のデフォルト値の設定

2.目的

ASP.NET 2.0 Beta のDetailsView の扱いに関してのメモです。

次のWeb Page が1行もコードを書くことなくでできてしまうのは、感動ものです。

Image

3.参考書

(1)

4.DetailsView

(1) 新規Web Project を作成し、ToolBoxのDataより、DetailsViewをフォームにドラッグ&ドロップする。次に、Tasksより Choose Data Source のドロップダウンリストより New Data Source を選択する。

Image

(2)次のData Source Onfiguration が表示されるので、ここではSQLサーバのNorthwind を使用するので、Databaseを選択する。

Image

(3)すると、次の Configure Data Source が表示されるので、Choose a data connection で、適切なデータベースを選択する。ここではまだ接続していないので、Newボタンを押して新規に作成する。

Image

(4)すると Connection Properties が表示されるので、localhost のNorthwind データベースを選択する。

Image

(5) 一応接続のテストも Test Connection ボタンで行っておく。

Image

(6) これで、data connection の設定が完了するので、次に進む。

Image

(7)Save connection string to the appication configuration file と聞いてくるので、コネクションストリングを Web.config ファイルにストアし、あとから Web.config ファイルを修正することでコネクションを修正する場合は、Yesを選択して、次へ進む。

Image

(8)すると、Configure Select Statement ダイアログが表示されるので、Employees テーブルからすべての列を選択する。

Image

(9) Test Query ダイアログが表示されるので、Test Query ボタンを押し、クエリが問題なく実行できることを確認する。

Image

(10)Finish を押すと、次のように出来上がる。

Image

(11)ここで、実行してみると、次のようにブラウザ上で詳細ビューを表示できるようになる。

Image

 

5.DetailsViewのデザインの変更とページングの追加

このままだと、見た目もかっこ悪いし、従業員の最初のレコードしか見れないので、Common DetailsView Tasksより、修正をかけていきます。

(1) 見た目の変更

Common DetailsView Tasksより、Auto Format を選択し、scheme を選択します。ここでは、Slateを選択しました。

Image

(2)他の従業員も見えるようにページングの機能を追加する。

Common DetailsView Tasksより、Enable Paging のチェックボックスをOnにする。

ここまでで、次のように見た目も、レコードの遷移も可能になります。

Image

 

6.DetailsViewでの画像の表示

次に、Photo で System.Byte[] となっていて、写真が見えないので、画像が表示できるように修正します。Common DetailsView Tasksより、Edit Field を選択します。すると、次のようにFieldsダイアログが表示されます。

(1) まず現在のPhotoフィールドをSelected Fields から削除します。

(2)次に、Available Fields から Image Fields のPhoto を選択して、Add ボタンを押します。すると、Selected FieldsにPhoto が追加されます。表示場所を、上矢印、下矢印で調整します。

Image

ここまでで、実行してみましょう。次のように画像が表示できます。

Image

7.DetailsViewへの編集、追加、削除機能の追加

次に、編集、追加、削除もできないので不調ですよね。そこで、Common DetailsView Tasksより、編集、追加、削除ができるようにしていきます。Common DetailsView Tasksより、Edit Field を選択します。Available Fields の Command Field に、

  • Edit, Update, Cancel
  • Delete
  • New, Insert, Cancel

フィールドがあるので、これらを Add ボタンにより追加していきます。下図のようにSelected Fields にそれらのフィールドが追加されていることを確認します。

Image

ここで、実行してみると、次のように、

  • 編集
  • 削除
  • 新規作成

が追加されています。

Image

編集ボタンを押すと、次のような編集画面が表示されます。

Image

同様に新規作成をクリックすると、次のように挿入画面が表示されます。

Image

しかし、実際に挿入、編集、削除を実行すると、次のようなエラーが発生します。

'/DetailsView' アプリケーションでサーバー エラーが発生しました。

Inserting is not supported by data source 'SqlDataSource1' unless InsertCommand is specified.

Image

これは、INSERT, UPDATE, DELETE のSQLコマンドがセットされていないためです。

そこで、Common DetailsView Tasksより、Configure Data Sourceを選択します。Choose a connection では、先ほど選択したコネクションストリングを選択します。

Image

次に、Congigure Data Source ダイアログで、Advanced Options ボタンを押します。

Image

すると、Advanced SQL Generation Options が表示されますので、Generate Insert, Update and Delete statements にチェックします。また、Optimistic にしたい場合には、Use optimistic concurrency にもチェックします。

Image

 

注意
Use optimistic concurrency にチェックすると、コンフリクトしたかどうかを検出するように Update, Delete 文を修正してくれます。このとき、データソースのConflictDetection プロパティがCompareAllValuesとなり、WHERE句ですべての項目の完全一致条件を追加されます。1つ1つを比較しているので頻繁にUpdate, Delete が発生する場合は性能的に問題が出る可能性がありそうです。

一方、Use optimistic concurrency にチェックしないと、データソースのConflictDetection プロパティがOverwriteChanges (デフォルト)となり、コンフリクトが発生した場合に予期せぬ結果(別の人が修正したものを知らずに上書きしてしまうなど)が発生しますので、十分な注意が必要です。

いずれにしても、自動生成におまかせするのはいいのですが、どのようなものが自動生成されたのか、特にコネクションストリング、SQL文は確認すべきです。

 

注意
Northwind のデータベースのデータ型で、ntext, image という古いデータ型を使用しています。そのままだと、次のようなエラーが出ます。
  • Data types ntext and nvarchar are incompatible in equal to operator.
  • Data types image and varbinary are incompatible in equal to operator.

この場合、Northwind のデータ型をntext→nvarchar, image→varbinary(MAX)に修正してあげる必要があります。

Visual Studio の Server Explorer から Emploeyeesテーブルで Open Table Definition でテーブルの定義を開き、Photo, Notes のデータ型を次のように変更します。

この場合、もう一度、上記のAdvanced SQL Generation Options で再生成してあげる必要があります。

Image

 

 

Image

このままだと、画像が大きすぎるので、小さくします。Common Tasks より、Edit Field を選択し、Fields ダイアログを表示します。この中のSelected Fields より、Photo を選択し、右PaneのControlStyle→Height, Width で画像サイズを指定します。

Image

これにより、次のようになります。

Image

8.インサート時のデフォルト値の設定

bit型で、CheckBoxをバインドしている場合、データベースへのインサート時にNULLを許容しない列へのインサートしようとすると、チェックボックスの状態を変更していないと、エラーになってしまいます。インサート時にバインドしたチェックボックスのデフォルトをセットするには、SqlDataSourceの InsertQuery プロパティより、「...」ボタンを押します。

Image

すると、つぎのようなコマンドおよびパラメータのエディタが開きます。ここで、Default Valueでデフォルト値を設定することができます。

Image

また、右下の「詳細設定プロパティ」リンクをクリックすると、次のように詳細プロパティが表示されますので、より細かな設定を行うことができます。

Image