2007年8月17日金曜日

ASP.NET GridViewで一覧表示 ~ObjectDataSource(DataReader)~

■データベースを作成します。
新しい項目の追加より「SQLデータベース」を追加します。
アプリケーションルート直下にASP.NETフォルダ「App_Data」が作成され、App_Dataフォルダ直下にデータベースが作成されます。

■テーブルを作成します。
「表示」メニューより「サーバーエクスプローラ」を起動します。
サーバーエクスプローラの「データ接続」の右クリックメニューより「接続の追加」を選択します。
データソース「SqlServer」、サーバー名、データベース名を選択または入力します。
作成したデータベース接続のテーブルに「tblCompany」、「tblCustomer」を作成します。
・tblCompanyテーブル定義


サーバーエクスプローラで作成したテーブルを選択し、右クリックメニュー「テーブルデータの表示」でテストデータを作成しておきます。

■Web.configにConnectionStringを定義します。
<connectionStrings>

    <add name="ConnectionString" 

         connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True" 

         providerName="System.Data.SqlClient"/>

</connectionStrings>


■データアクセスクラスを作成します。
新しい項目の追加より「クラス」を追加します。ファイル名は「Customer.vb」とします。
ASP.NETフォルダ「App_Code」がない場合は自動的に作成されます。
Imports Microsoft.VisualBasic

Imports System.Data

Imports System.Data.Common

Imports System.ComponentModel




''' <summary>

''' 会社クラスです。

''' </summary>

''' <remarks></remarks>

Public Class Company




    ''' <summary>

    ''' 会社データを取得します。

    ''' </summary>

    ''' <returns></returns>

    ''' <remarks></remarks>

    <DataObjectMethod(DataObjectMethodType.SelectTrue)> _

    Public Shared Function GetCompanyData() As DbDataReader

        'App.configより接続文字列を取得します。

        Dim setting As ConnectionStringSettings

        setting = ConfigurationManager.ConnectionStrings("ConnectionString")

        'ファクトリーオブジェクトを作成します。

        Dim factory As DbProviderFactory

        factory = DbProviderFactories.GetFactory(setting.ProviderName)

        'コネクションオブジェクトを作成します。

        Dim cnn As DbConnection

        cnn = factory.CreateConnection

        cnn.ConnectionString = setting.ConnectionString

        'SQLを作成します。

        Dim sql As String

        sql = "SELECT [CompanyID],[CompanyName],[CompanyKana] From [tblCompany]"

        'コマンドオブジェクトを作成します。

        Dim cmd As DbCommand

        cmd = factory.CreateCommand
        cmd.Connection = cnn

        cmd.CommandText = sql

        'コネクションをオープンします。

        cnn.Open()

        'DbDataReaderを返します。

        'DbDataReaderオブジェクトが破棄されたタイミングで、それに関連付いたDbConnectionオブジェクトも自動的に破棄されます。

        '例外発生時もcnn.Closeする必要はありません。

        Return cmd.ExecuteReader(CommandBehavior.CloseConnection)

    End Function




End Class


DataObjectMethod属性(System.ComponentModel名前空間)はデータアクセスクラス内のメソッドについてメソッドの種類やデフォルトのデータメソッドかどうかを宣言します。DataObjectMethod属性は必須ではありませんが、明示的に指定しておくことで後述するObjectDataSource構成ウィザードで対応するメソッドが自動的に表示されるようになります。

■CompanyList.aspxを作成します。
新しい項目の追加より「Webフォーム」を追加し「CompanyList.aspx」とします。

■ObjectDataSourceコントロールを配置します。
CompanyList.aspxに「ObjectDataSource」コントロールを配置します。
ObjectDataSourceのスマートタグより「データソースの構成」をクリックします。

ビジネスオブジェクトに先ほど作成したCompanyクラスを選択します。

SELECTメソッドにCompanyクラスのGetCompanyDataメソッドを選択します。


■GridViewを配置します。
CompanyList.aspxに「GridView」コントロールを配置します。
GridViewのスマートタグより「データソースの選択」をクリックし、ObjectDataSource1を選択します。

GridViewのスマートタグより「列の編集」をクリックし「フィールド」ダイアログボックスを起動します。
「使用できるフィールド」ボックスからBoundFieldを追加します。
「選択されたフィールド」ボックスより追加したBoundFieldを選択し、「HeaderText」プロパティを「会社ID」、「DataField」プロパティを「CompanyID」にします。同様にBoudFieldを追加し、HeaderTextプロパティ=会社名、DataFieldプロパティ=CompanyNameを設定します。同様にBoudFieldを追加し、HeaderTextプロパティ=会社名カナ、DataFieldプロパティ=CompanyKanaを設定します。「自動生成フィールド」チェックボックスはチェックオフにします。


■実行して確認してみます。


■ページング機能、並べ替え機能
今回作成したCompanyクラスのGetCompanyDataメソッドの戻り値はDataReaderなのでページング機能、並べ替え機能は使用できません。
GridViewコントロールのスマートタグには「並べ替えを有効にする」チェックボックスは表示されていません。「ページングを有効にする」チェックボックスは表示されていますが、チェックオンにして実行するとDataReaderオブジェクトはページング機能をサポートしていないとエラーになります。。

0 件のコメント: