DataGridをフォーマットする

 

自動フォーマットを利用してDataGridをフォーマットします。

 

DataGridCustomers表をフォーマットして表示する (ch52DataGrid1.aspx)

 

DataGridOracleデータベースのCustomers表をフォーマットして表示します。Customers表から行(レコード)を抽出するには、パッケージ(CustomerPackage)に登録されているストアドプロシージャ(GetCustomersTop10As)を使用します。

 

iSQL*PlusまたはSQL*Plusを起動して、事前にパッケージ仕様部(C:\vbora\sql\CustomerPackage.sql)とパッケージ本体部(C:\vbora\sql\CustomerPackageBody.sql)を作成してください。

 

パッケージ仕様部(CustomerPackage.sql)

CREATE OR REPLACE PACKAGE CustomerPackage AS

  TYPE rcurCustomers IS REF CURSOR;

  PROCEDURE GetCustomersTop10As(

    orcurCustomers OUT rcurCustomers);

END CustomerPackage;

 

パッケージ本体部(CustomerPackageBody.sql)

CREATE OR REPLACE PACKAGE BODY CustomerPackage AS

  PROCEDURE GetCustomersTop10As(

    orcurCustomers OUT rcurCustomers) IS

  BEGIN

    OPEN orcurCustomers FOR

      SELECT CustomerID AS ID,

        CompanyName AS 得意先,

        ContactName AS 担当,

        Phone AS 電話

      FROM Customers

      WHERE CustomerID < 11

      ORDER BY CustomerID;

  END GetCustomersTop10As;

END CustomerPackage;

 

このサンプルでは、以下のノウハウを習得することができます。

 

DataGridをフォーマットする方法

DataGridの自動フォーマットの使い方

DataGridのプロパティビルダの使い方

SELECT文の列に別名を付ける方法

 

1. Webフォーム追加

 

ソリューションエクスプローラからフォルダ[ch5]を右クリックして、新規Webフォーム「ch52DataGrid1」を追加します。

 

2. DataGrid作成

 

ツールボックスの[Webフォーム]から、DataGridをドラッグ&ドロップします。デザイナにDataGrid1のオブジェクトが作成されます。

 

3. 自動フォーマット

 

DataGrid1の右クリックから[自動フォーマット]を選択します。「自動フォーマット」が表示されたら、「スキームの選択」から[プロフェッショナル1]を選択して、[OK]をクリックします。

 

fig5-2-1

自動フォーマットから[プロフェッショナル1]を選択

 

4. プロパティビルダ

 

DataGrid1の右クリックから[プロパティビルダ]を選択します。「DataGrid1プロパティ」が表示されたら、左側から[書式]を選択します。画面中央の「オブジェクト」から[ヘッダー]を選択したら、「水平方向の配置」から[中央]を選択します。[OK]をクリックしてダイアログを閉じます

 

fig5-2-2

プロパティビルダからヘッダーを中央揃えに設定

 

5. コードビューに切り替え

 

メニューバーから[表示][コード]を選択してコードビューに切り替えます。クラスモジュールの先頭に、以下のImportsステートメントを追加します。

 

Imports System.Data

Imports Oracle.DataAccess.Client

Imports Oracle.DataAccess.Types

 

Page_Loadイベントに、以下のコードを追加します。

 

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

cccHandles MyBase.Load

  DataGrid1.DataSource = CreateDataSet("CustomerPackage.GetCustomersTop10As")

  DataGrid1.DataBind()

End Sub

 

クラスモジュールの最後に、Function CreateDataSetを追加します。

 

Private Function CreateDataSet(ByVal strPackage As String) As DataSet

  Dim con As New OracleConnection(ConfigurationSettings.AppSettings("conStringOraNw"))

  Dim cmd As New OracleCommand(strPackage, con)

  Dim da As New OracleDataAdapter

  Dim ds As New DataSet

 

  cmd.CommandType = CommandType.StoredProcedure

  cmd.Parameters.Add("1", OracleDbType.RefCursor, ParameterDirection.Output)

  da.SelectCommand = cmd

  da.Fill(ds)

  Return ds

End Function

 

6. ブラウザに表示

 

ソリューションエクスプローラから[ch52DataGrid1.aspx]を右クリックしてブラウザに表示します。DataGridCustomers表の得意先ID、得意先、担当、電話の列がフォーマットされて表示されます。

 

fig5-2-3

DataGridをフォーマットして表示

 

 

■解説

 

DataGridをフォーマットするには、「自動フォーマット」と「プロパティビルダ」を利用します。「自動フォーマット」は、DataGridの全体をフォーマットするときに利用します。自動フォーマットには、カラフル、プロフェッショナル、シンプルなどのスキームが用意されています。

 

DataGridのヘッダー、フッター、データ部を個別にフォーマットするには、「プロパティビルダ」から[書式]を選択します。画面中央の「オブジェクト」から、[ヘッダー][フッター][ページャ][標準項目][項目の変更][選択されたアイテム]などのオブジェクトを選択して、「表示」と「配置」のプロパティを設定することができます。

 

DataGridをフォーマットすると、DataGridHeaderStyleItemStyleAlternatingItemStyleSelectedItemStyleFooterStylePagerStyleが生成されます。

 

<asp:DataGrid id="DataGrid1" runat="server"

  BorderColor="#999999" BorderStyle="None" BorderWidth="1px"

  BackColor="White" CellPadding="3" GridLines="Vertical">

  <HeaderStyle Font-Bold="True" HorizontalAlign="Center"

    ForeColor="White" BackColor="#000084">

  </HeaderStyle>

  <FooterStyle ForeColor="Black" BackColor="#CCCCCC">

  </FooterStyle>

  <SelectedItemStyle Font-Bold="True"

    ForeColor="White" BackColor="#008A8C">

  </SelectedItemStyle>

  <AlternatingItemStyle BackColor="#DCDCDC">

  </AlternatingItemStyle>

  <ItemStyle ForeColor="Black" BackColor="#EEEEEE">

  </ItemStyle>

  <PagerStyle HorizontalAlign="Center"

    ForeColor="Black" BackColor="#999999" Mode="NumericPages">

  </PagerStyle>

</asp:DataGrid>

 

Page_Loadイベントでは、パッケージ(CustomerPackage)に登録されているストアドプロシージャ(GetCustomersTop10As)を使用して、Customers表から行(レコード)を抽出しています。

 

TYPE rcurCustomers IS REF CURSOR;

 

PROCEDURE GetCustomersTop10As(

  orcurCustomers OUT rcurCustomers) IS

BEGIN

  OPEN orcurCustomers FOR

    SELECT CustomerID AS ID,

      CompanyName AS 得意先,

      ContactName AS 担当,

      Phone AS 電話

    FROM Customers

    WHERE CustomerID < 11

    ORDER BY CustomerID;

END GetCustomersTop10As;

 

このストアドプロシージャのSELECT文には、「AS」で別名を付けて列名を日本語にしています。この場合、DataGridのヘッダーには、表の別名「ID」、「得意先」、「担当」、「電話」が表示されます。

 

SELECT文のWHERE句に「CustomerID < 11」のように抽出条件を指定していますので、Customers表から10件の行(レコード)が抽出されます。

 

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

cccHandles MyBase.Load

  DataGrid1.DataSource = CreateDataSet("CustomerPackage.GetCustomersTop10As")

  DataGrid1.DataBind()

End Sub

 

 

Private Function CreateDataSet(ByVal strPackage As String) As DataSet

  Dim con As New OracleConnection(ConfigurationSettings.AppSettings("conStringOraNw"))

  Dim cmd As New OracleCommand(strPackage, con)

  Dim da As New OracleDataAdapter

  Dim ds As New DataSet

 

  cmd.CommandType = CommandType.StoredProcedure

  cmd.Parameters.Add("1", OracleDbType.RefCursor, ParameterDirection.Output)

  da.SelectCommand = cmd

  da.Fill(ds)

  Return ds

End Function