DataGridをエクスポートするサンプル

図 DataGridをエクスポートするサンプル
このサンプルは、DataGridに表示されているデータをエクスポートすることができます。DataGridをエクスポートするには、ドロップダウンリストからExcel、Word、HTML、XMLのいずれかを選択してからエクスポート(保存)ボタン
をクリックします。
ドロップダウンリストからExcel、Wordを選択したときは、「ファイルのダウンロード」のダイアログが表示されてファイルを[開く]か[保存]するか問い合わせをします。[開く]を選択したときは、Excel/Wordの画面にDataGridがエクスポートされます。[保存]を選択したときは、「名前を付けて保存」のダイアログが表示されますので保存場所とファイル名を入力します。
ドロップダウンリストからHTML、XMLを選択したときは、新規ウィンドウが開いてDataGridのデータがHTML/XML形式で表示されます。
◆プログラムPopupExport.aspxのポイント
¶ポイント1 DataGridをHTMLに変換するには
このサンプルでは、DataGridをExcel、WordにエクスポートするときHTML形式に変換しています。DataGridをHTML形式に変換するにはRenderControl()メソッドを使用します。
dgrdCustomers.RenderControl(htw)
¶ポイント2 HTMLデータをExcel/Wordに送信するには
HTMLデータをExcelのデータとしてブラウザに送信するには、ResponseのContentTypeプロパティにapplication/vnd.ms-excelを設定します。Wordのデータとして送信するには、ContentTypeにapplication/mswordを設定します。
Response.ContentType
= "application/vnd.ms-excel"
Response.Write(sw.ToString())
Response.ContentType
= "application/msword"
Response.Write(sw.ToString())
¶ポイント3 HTML/XMLデータをブラウザに送信するには
HTMLデータとしてブラウザに送信するには、ResponseのContentTypeプロパティにtext/htmlを設定します。XMLデータとしてブラウザに送信するには、ContentTypeにtext/xmlを設定します。
Response.ContentType
= "text/html"
Response.Write(sw.ToString())
Response.ContentType
= "text/xml"
Response.Write(ds.GetXml())
◆メインプログラムDataGridExport.aspxの解説(HTML編)
DataGridExport.aspxのプレゼンテーションコンテンツの部分について解説します。行125-131のImageButtonでは、DataGridをエクスポートするボタンを定義しています。行132-133のDropDownListには、DataGridをエクスポートするデータ形式を表示します。DropDownListに表示するアイテムは、ランタイム時にバインドします。行134-140のLabelとTextBoxでは、件数を表示します。
![]()
図 エクスポートボタン、ドロップダウンリスト、件数を表示した例
行153-205では、DataGridを定義しています。このDataGridには、AutoGenerateColumnsプロパティにFalseを設定してカラムの自動生成機能を抑止しています。行167-204の<Columns>…</Columns>では、TemplateColumn、BoundColumnを定義しています。行168-178のTemplateColumnでは、ItemTemplateにLinkButtonを定義しています。このLinkButtonは、レコードセレクターとして使用します。行179-183のBoundColumnでは、得意先テーブルの得意先IDをバインドしています。後続するBoundColumnでは、得意先名、担当者名、役職、電話番号、都道府県をバインドしています。

図 DataGridにLinkButtonと得意先テーブルのカラムをバインドした例
リスト DataGridExport.aspxのソースコード(HTML編)
|
105:
<html> 174:
Visible="True" /> |
◆メインプログラムDataGridExport.aspxの解説(コード編)
DataGridExport.aspxは、DataGridに表示されている得意先テーブルをExcel、Word、HTML、XMLのデータ形式でエクスポートします。
Sub Page_Load()イベントの処理
このイベントはDataGridExport.aspxがロードされたときに実行されます。このイベントでは、DropDownListとDataGridをバインドします。
行9-12のIf…End Ifでは、ページが最初にロードされたか調べています。最初にロードされたときは、BindDropDownList()とBindDataGrid()を呼び出します。BindDropDownListではDropDownListに、エクスポートするデータ形式をバインドします。BindDataGridでは、DataGridに得意先テーブルをバインドします。
|
7: Sub Page_Load() |
Sub dgrdCustomers_ItemDataBound()イベントの処理
このイベントは、DataGridのDataBind()メソッドが実行されたときに発生します。このイベントでは、DataGridのアイテム(DataGridItem)にクライアント側で動作するonClickイベントを登録します。これにより、DataGridの任意のセルをクリックして行を選択できるようになります
|
23: Sub dgrdCustomers_ItemDataBound(s
As Object, e As DataGridItemEventArgs) |
Sub ibtnExport_Command()イベントの処理
このイベントは、WebページからDataGridをエクスポートするボタンをクリックしたときに発生します。このイベントでは、InsertScriptBlock()関数を呼び出して、子ウィンドウを開きます。
行40では、DropDownListから選択したアイテム(データ形式)を取得しています。行41では、InsertScriptBlock()を呼び出して子ウィンドウを開くJavaScriptを登録します。InsertScriptBlock()の引数には、エクスポートするデータ形式を指定します。
|
39: Sub
ibtnExport_Command(s As Object, e As CommandEventArgs) |
Sub BindDataGrid()の処理
このサブプロシージャでは、DataGridに得意先テーブルをバインドして表示します。BindDataGridは、Page_Loadイベントから呼ばれます
|
44: Sub BindDataGrid() |
Sub BindDropDownList()の処理
このサブプロシージャでは、DropDownListにエクスポートするデータ形式をバインドして表示します。BindDropDownListは、Page_Loadイベントから呼ばれます
行58では、DropDownListのItemsコレクションからListItemCollectionを作成しています。行60-65のWith…End Withでは、ListItemCollectionのAdd()メソッドでアイテムを追加しています。Add()メソッドの引数には、ListItemを指定します。ListItemの引数には、Text/Valueプロパティを指定します。ここでは、Textプロパティのみ指定しています。
|
57: Sub BindDropDownList() |
Sub InsertScriptBlock()の処理
このサブプロシージャでは、子ウィンドウを開くJavaScriptを生成して登録します。InsertScriptBlockは、エクスポートのボタンをクリックしたときに、ボタンのOnCommandイベントから呼ばれます。
行69-71では、JavaScriptのwindow.open()メソッドの引数に指定するオプションを生成しています。行74-78のWith…End Withでは、StringBuilderのAppend()メソッドで以下のJavaScriptを生成しています。
<script
language='javascript'>
window.open('PopupExport.aspx?typ=content-type','_blank','features');
</script>
JavaScriptのwindow.open()メソッドは、新規ウィンドウを開きます。Open()メソッドの引数には、url、target、featuresを指定します。urlには、新規ウィンドウに表示するファイルPopupExport.aspxを指定します。このurlには、?typ=でQueryStringを指定しています。typ=には、エクスポートするデータ形式を設定します。
行79では、Page.RegisterClientScriptBlock()メソッドでJavaScriptを登録します。ここで登録したJavaScriptは、Webページがロードされたときにクライアント側のブラウザから実行されます。
|
68: Sub
InsertScriptBlock(strContentType As String)
|
Function CreateDataSet()関数の処理
この関数は、データベースからレコードを抽出してDataSetを作成して返します。CreateDataSetは、BindDataGrid()から呼ばれます。CreateDataSetのの引数には、strSQLとstrConnectionStringを指定します。strSQLには、データベースからレコードを抽出するSELECTステートメントを指定します。strConnectionStringには、Web.Configに登録されている<add>タグのkeyを指定します。strConnectionStringを省略したときは、デフォルトとしてconStringAccNwを使用します。
<add
key="conStringAccNw"
value="PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA
Source=C:\WebMatrix\webdb\Nwind.mdb" />
|
92: Function
CreateDataSet(strSQL As String, _ |
リスト DataGridExport.aspxのソースコード(コード編)
|
1: <%@ Page
language="vb" SmartNavigation="false" %> |
◆サブプログラムPopupExport.aspxの解説(HTML編)
PopupExport.aspxには、DataGridを定義しています。DataGridは、Excel、Word、HTML形式でエクスポートするときに使用します。XML形式でエクスポートするときは、DataSetを使用します。
行79-111では、DataGridを定義しています。このDataGridには、AutoGenerateColumnsプロパティにFalseを設定してカラムの自動生成機能を抑止しています。また、Webページをポストバックさせないため、EnableVie
DataGridをHTMLに変換するときはCssClassプロパティが無効になりますのでWebコントロールの厳密に型指定されたCSSプロパティ(BackColor、ForeColorなど)を使用します。
メインプログラムのDataGridでは、CssClassを使用して背景色、前景色を設定していますが、サブプログラムでは、型指定されたCSSプロパティを使用しています。
行90-110の<Columns>…</Columns>では、BoundColumnで得意先テーブルの得意先ID、得意先名、担当者名、役職、電話番号、都道府県をバインドしています。カラムの幅は、ItemStyle-Widthプロパティに設定します。
DataGridがExcel、Wordにエクスポートされたときに、カラム幅が狭いと2行で表示されますので1行で表示させるには、ItemStyle-Widthの値を調整します。
リスト PopupExport.aspxのソースコード(HTML編)
|
72: <html> 91: <asp:BoundColumn
ItemStyle-Width="25" |
◆サブプログラムPopupExport.aspxの解説(コード編)
PopupExport.aspxは、DataGridに表示されている得意先テーブルをHTML形式に変換してExcel、Wordにエクスポートします。XML形式でエクスポートするときは、DataSetを使用します。
Sub Page_Load()イベントの処理
このイベントは、ページがロードされたときに発生します。このイベントでは、DataGridを選択したデータ形式でエクスポートします。
行8では、RequestのParamsプロパティからQueryStringを取得しています。QueryStringには、エクスポートするデータ形式(Excel、Word、HTML、XML)が指定されています。Paramsプロパティの代わりにQueryStringプロパティを使用することもできます。
Request.Params("typ")
è Excel
Request.QueryString("type")
è Excel
行9-10では、StringWriterとHtmlTextWriterのインスタンスを生成しています。HtmTextWriterとStringWriterは、DataGridをHTML形式に変換するときに使用します。
行12-37のIf…ElseIf…End Ifでは、DataGridをHTML/XML形式に変換してエクスポートしています。行13-17では、DataGridをHTML形式に変換してExcelにエクスポートします。行13では、BindDataGrid()を呼び出して、DataGridに得意先テーブルをバインドします。行14では、DataGridのRenderControl()メソッドを実行してDataGridをHTMLに変換しています。変換されたHTMLは、StringWriterに保存されます。行15-17では、ResponseのWrite()メソッドでHTMLをブラウザに送信しています。ResponseのContentTypeプロパティにapplication/vnd.ms-excelを設定するとExcelのデータとして送信されます。ResponseのEnd()メソッドは、バッファに残っている未送信のデータを強制送信します。これで、DataGridがExcel上に表示されます。
14:
dgrdCustomers.RenderControl(htw)
15: Response.ContentType =
"application/vnd.ms-excel"
16:
Response.Write(sw.ToString())
17: Response.End()
行19-23では、DataGridをHTML形式に変換してWordにエクスポートします。HTMLをWordのデータとして送信するには、ResponseのContentTypeプロパティにapplication/mswordを設定します。
行25-29では、DataGridをHTML形式に変換してブラウザ(Internet Explorer)に表示します。HTMLデータとしてブラウザに送信するには、ResponseのContentTypeプロパティにtext/htmlを設定します。
行31-36では、DataSetに得意先テーブルを取り込んでXML形式に変換してブラウザ(Internet Explorer)に表示します。行31では、得意先テーブルからレコードを抽出するSQLを生成しています。行32では、CreateDataSet()関数を呼び出してDataSetを作成します。行33では、DataSetのDataSetNameプロパティにCustomersを設定しています。DataSetNameプロパティは、XMLのルートノードを生成するときに使用します。DataSetからXMLデータを生成するには、DataSetのGetXml()メソッドを使用します。XMLデータをブラウザに送信するには、ResponseのContentTypeプロパティにtext/xmlを設定します。

図 DataSetName(Customers)がルートノードに表示された例
|
7: Sub Page_Load() |
Sub BindDataGrid()の処理
このサブプロシージャでは、DataGridに得意先テーブルをバインドして表示します。BindDataGridは、Page_Loadイベントから呼ばれます。
|
40: Sub BindDataGrid() |
Function CreateDataSet()関数の処理
この関数は、データベースからレコードを抽出してDataSetを作成して返します。CreateDataSetは、BindDataGrid()から呼ばれます。CreateDataSetのの引数には、strSQLとstrConnectionStringを指定します。strSQLには、データベースからレコードを抽出するSELECTステートメントを指定します。strConnectionStringには、Web.Configに登録されている<add>タグのkeyを指定します。strConnectionStringを省略したときは、デフォルトとしてconStringAccNwを使用します。
<add
key="conStringAccNw"
value="PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA
Source=C:\WebMatrix\webdb\Nwind.mdb" />
|
60: Function
CreateDataSet(strSQL As String, _ |
リスト PopupExport.aspxのソースコード(コード編)
|
1: <%@ Page
language="vb" SmartNavigation="false" %> |
Note
|
ResponseのContentTypeプロパティが有効にならないときの対処 ResponseのContentTypeプロパティにMIMEタイプを指定しても有効にならないときは、ResponseのCharsetプロパティに空白を設定します。 Response.ContentType = "application/vnd.ms-excel" Response.Charset
= "" Response.Write(sw.ToString()) Response.End() |
Note
|
IIS
5.xでサポートしている主なMIME(Multipurpose Internet Mail Extensions)タイプ 表 IIS 5.xでサポートしている主なMIMEタイプ
|