DataGridをフォーマットする
自動フォーマットを利用してDataGridをフォーマットします。
●DataGridにCustomers表をフォーマットして表示する (ch52DataGrid1.aspx)
DataGridにOracleデータベースのCustomers表をフォーマットして表示します。Customers表から行(レコード)を抽出するには、パッケージ(CustomerPackage)に登録されているストアドプロシージャ(GetCustomersTop10As)を使用します。
iSQL*PlusまたはSQL*Plusを起動して、事前にパッケージ仕様部(C:\vbora\sql\CustomerPackage.sql)とパッケージ本体部(C:\vbora\sql\CustomerPackageBody.sql)を作成してください。
パッケージ仕様部(CustomerPackage.sql)
CREATE OR REPLACE PACKAGE
TYPE rcurCustomers IS REF CURSOR;
PROCEDURE GetCustomersTop10As(
orcurCustomers OUT rcurCustomers);
END CustomerPackage;
パッケージ本体部(CustomerPackageBody.sql)
CREATE OR REPLACE PACKAGE BODY
PROCEDURE GetCustomersTop10As(
orcurCustomers OUT rcurCustomers) IS
BEGIN
OPEN orcurCustomers FOR
SELECT
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]をクリックします。

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

図 プロパティビルダからヘッダーを中央揃えに設定
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)
Handles 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]を右クリックしてブラウザに表示します。DataGridにCustomers表の得意先ID、得意先、担当、電話の列がフォーマットされて表示されます。

図 DataGridをフォーマットして表示
■解説
DataGridをフォーマットするには、「自動フォーマット」と「プロパティビルダ」を利用します。「自動フォーマット」は、DataGridの全体をフォーマットするときに利用します。自動フォーマットには、カラフル、プロフェッショナル、シンプルなどのスキームが用意されています。
DataGridのヘッダー、フッター、データ部を個別にフォーマットするには、「プロパティビルダ」から[書式]を選択します。画面中央の「オブジェクト」から、[ヘッダー]、[フッター]、[ページャ]、[標準項目]、[項目の変更]、[選択されたアイテム]などのオブジェクトを選択して、「表示」と「配置」のプロパティを設定することができます。
DataGridをフォーマットすると、DataGridのHeaderStyle、ItemStyle、AlternatingItemStyle、SelectedItemStyle、FooterStyle、PagerStyleが生成されます。
<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
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)
Handles 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