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に設定します。
スマートタグより「テンプレート編集の終了」をクリックします。


■実行して確認します。

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

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

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



■SqlDataSorceを修正します。
SqlDataSourceのスマートタグより「データソースの構成」をクリックします。
次へボタンをクリックします。

WHEREボタンをクリックします。

顧客名による抽出条件を指定します。


顧客名カナによる抽出条件を指定します。


並べ替え順序を指定します。



■空データ時のメッセージを作成します。
GridViewのスマートタグより「テンプレートの編集」を選択します。

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

(表示ボックスで選択できる「PageTemplate」はページング機能を利用せずに独自のインターフェイスを定義する場合に使用します。)

■実行して確認します。


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

GridViewで一覧表示 ~ObjectDataSource(DataReader)~ のObjectDataSourceのデータソースを型付DataSetにしてみます。

■型付DataSetを用意します。
新しい項目の追加より「データセット」をApp_Codeフォルダに追加します。
サーバーエクスプローラからCompanyテーブルをドラッグ&ドロップします。

(ビジネスオブジェクトの候補にTableAdapterが表示されないので一度ビルドしておきます。)

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

Selectメソッドを選択します。

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

GridViewで一覧表示 ~ObjectDataSource(DataReader)~ のCompanyクラスを以下のように修正します。
CompanyクラスのGetCompanyDataメソッドの戻り値をDataSetにします。
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 DataSet

        '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

        'アダプターオブジェクトを作成します。

        Dim adp As DbDataAdapter

        adp = factory.CreateDataAdapter

        adp.SelectCommand = cmd

        'データテーブルを作成します。

        Dim ds As New DataSet

        adp.Fill(ds)

        Return ds

    End Function




End Class


■並べ替え機能を有効にします。
GridViewコントロールのスマートタグより「並べ替えを有効にする」チェックボックスをチェックオンにします。「列の編集」をクリックしフィールドダイアログボックスを起動します。各フィールドの「SortExpression」プロパティを指定します。
「会社ID」フィールドの「SortExpression」プロパティに「CompanyID」を指定します。
「会社名」フィールドの「SortExpression」プロパティに「CompanyName」を指定します。
「会社名カナ」フィールドの「SortExpression」プロパティに「CompanyKana」を指定します。



■ページング機能を有効にします。
GridViewコントロールのスマートタグより「ページングを有効にする」チェックボックスをチェックオンにします。
表示する行数はGridViewコントロールのPageSizeプロパティで設定できます。

■実行して確認します。

ASP.NET GridViewで一覧表示 ~SqlDataSource~

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


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


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

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

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

先ほど作成したデータベースを選択します。

アプリケーション構成ファイル(Web.Config)に保存する接続文字列の名前を指定します。
ここでは「ConnectionString」という名前でデータベースの接続文字列がWeb.configに保存されます。

グリッドで使用するテーブルと列を選択します。

完了をクリックする。


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

GridViewのスマートタグより「列の編集」をクリックし「フィールド」ダイアログボックスを起動する。
「選択されたフィールド」ボックスの「CompanyID」を選択して「BoundFieldプロパティ」ボックスの「HeaderText」プロパティを「会社ID」に変更する。
同様に「CampanyName」の「HeaderText」プロパティを「会社名」に、「CampanyKana」の「HeaderText」プロパティを「会社名カナ」に変更する。
また「ItemStyle」を展開して「Width」プロパティによりグリッドの列幅を調整します。


グリッドビューのスマートタグより「並べ替えを有効にする」と「ページングを有効にする」をチェックオンにします。
「並べ替えを有効にする」は項目名がリンクになり、リンクをクリックすることで指定した項目の値で並べ替えることができるようになります。
「ページングを有効にする」はグリッドビューの下部にページ番号が表示され、ページング機能が利用できるようになります。


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

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オブジェクトはページング機能をサポートしていないとエラーになります。。

雑記 プログラミングMicrosoft ASP.NET 2.0 マイクロソフト公式解説書

プログラミングMicrosoft ASP.NET 2.0 マイクロソフト公式解説書
税込価格 : ¥8,190
ビーケンワン


プログラミングMicrosoft ADO.NET 2.0 マイクロソフト公式解説書と合わせて買いました。総額17,000円!!
すっごく痛い出費だぁ°°・(>_<)・°°
ビーケンワンで期間中に1万円以上の購入者には、50人に1人全額キャッシュバックに賭けてみた。
神様マジでお願いします。゜(-m-)パンパン