2007年8月20日月曜日

ASP.NET GridViewで検索機能を追加~ObjectDataSource DataReader~

GridViewで一覧表示 ~ObjectDataSource(DataReader)~ を修正して検索機能を追加します。

■データアクセスクラスを修正します。
「Customer.vb」の「GetCompanyData」メソッドを以下のように修正します。
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(ByVal companyName As StringByVal companyKana As StringAs 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 New System.Text.StringBuilder

        sql.Append("SELECT [CompanyID],[CompanyName],[CompanyKana]")

        sql.Append(" FROM [tblCompany]")

        sql.Append(" WHERE")

        sql.Append(" ([CompanyName] LIKE '%' + @CompanyName + '%')")

        sql.Append(" AND")

        sql.Append(" ([CompanyKana] LIKE '%' + @CompanyKana + '%')")

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

        Dim cmd As DbCommand

        cmd = factory.CreateCommand

        cmd.Connection = cnn

        cmd.CommandText = sql.ToString

        'パラメータを設定します。

        '--会社名

        Dim prms(1As DbParameter

        prms(0) = factory.CreateParameter

        prms(0).ParameterName = "@CompanyName"

        prms(0).Value = companyName

        '--会社名カナ

        prms(1) = factory.CreateParameter

        prms(1).ParameterName = "@CompanyKana"

        prms(1).Value = companyKana

        '--コマンドに追加します。

        cmd.Parameters.AddRange(prms)

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

        cnn.Open()

        'DbDataReaderを返します。

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

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

        Return cmd.ExecuteReader(CommandBehavior.CloseConnection)

    End Function




End Class


■検索条件指定用のコントロールを配置します。


■ObjectDataSorceを修正します。
ObjectDataSourceのスマートタグより「データソースの構成」をクリックします。
ビジネスオブジェクトに先ほど作成したCompanyクラスを選択します。

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

パラメータの定義を行います。
パラメータ[companyName]のパラメータソースに[Control]を選択し、ControlIDに[txtCompanyName]、DefaultValueに「%」を設定します。

同様に、パラメータ[companyKana]のパラメータソースに[Control]を選択し、ControlIDに[txtCompanyKana]、DefaultValueに「%」を設定します。


■空データ時のメッセージを作成します。
GridViewのスマートタグより「テンプレートの編集」を選択します。
スマートタグの表示ボックスで「EmptyDataTemplate」が選択されていることを確認します。
EmptyDataTemplateボックスにLabelコントロールを配置し
Textプロパティに「該当するデータがありません。<br>抽出条件を指定してから「検索」ボタンをクリックしてください。」を設定します。
ForeColorプロパティをredに設定します。
スマートタグより「テンプレート編集の終了」をクリックします。


■実行して確認します。

0 件のコメント: