DataGridをエクスポートするサンプルこのサンプルは、DataGridに表示されているデータをエクスポートすることができます。ドロップダウンリストからExcel、Wordを選択したときは、「ファイルのダウンロード」のダイアログが表示されてファイルを[開く]か[保存]するか問い合わせをします。[開く]を選択したときは、Excel/Wordの画面にDataGridがエクスポートされます。[保存]を選択したときは、「名前を付けて保存」のダイアログが表示されますので保存場所とファイル名を入力します。ドロップダウンリストからHTML、XMLを選択したときは、新規ウィンドウが開いてDataGridのデータがHTML/XML形式で表示されます。DataGridをHTMLに変換するにはこのサンプルでは、DataGridをExcel、WordにエクスポートするときHTML形式に変換しています。DataGridをHTML形式に変換するにはRenderControl()メソッドを使用します。HTMLデータをExcel/Wordに送信するにはHTMLデータをExcelのデータとしてブラウザに送信するには、ResponseのContentTypeプロパティにapplication/vnd.ms-excelを設定します。Wordのデータとして送信するには、ContentTypeにapplication/mswordを設定します。HTML/XMLデータをブラウザに送信するにはHTMLデータとしてブラウザに送信するには、ResponseのContentTypeプロパティにtext/htmlを設定します。XMLデータとしてブラウザに送信するには、ContentTypeにtext/xmlを設定します。"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をバインドしています。</html>◆メインプログラムDataGridExport.aspxの解説(コード編)DataGridExport.aspxは、DataGridに表示されている得意先テーブルをExcel、Word、HTML、XMLのデータ形式でエクスポートします。Page_Load()イベントの処理このイベントはDataGridExport.aspxがロードされたときに実行されます。このイベントでは、DropDownListとDataGridをバインドします。Ifでは、ページが最初にロードされたか調べています。最初にロードされたときは、BindDropDownList()とBindDataGrid()を呼び出します。BindDropDownListではDropDownListに、エクスポートするデータ形式をバインドします。BindDataGridでは、DataGridに得意先テーブルをバインドします。dgrdCustomers_ItemDataBound()イベントの処理このイベントは、DataGridのDataBind()メソッドが実行されたときに発生します。このイベントでは、DataGridのアイテム(DataGridItem)にクライアント側で動作するonClickイベントを登録します。ibtnExport_Command()イベントの処理このイベントは、WebページからDataGridをエクスポートするボタンをクリックしたときに発生します。このイベントでは、InsertScriptBlock()関数を呼び出して、子ウィンドウを開きます。行40では、DropDownListから選択したアイテム(データ形式)を取得しています。行41では、InsertScriptBlock()を呼び出して子ウィンドウを開くJavaScriptを登録します。InsertScriptBlock()の引数には、エクスポートするデータ形式を指定します。BindDataGrid()の処理このサブプロシージャでは、DataGridに得意先テーブルをバインドして表示します。BindDropDownList()の処理このサブプロシージャでは、DropDownListにエクスポートするデータ形式をバインドして表示します。BindDropDownListは、Page_Loadイベントから呼ばれます行58では、DropDownListのItemsコレクションからListItemCollectionを作成しています。Withでは、ListItemCollectionのAdd()メソッドでアイテムを追加しています。Add()メソッドの引数には、ListItemを指定します。ListItemの引数には、Text/Valueプロパティを指定します。ここでは、Textプロパティのみ指定しています。InsertScriptBlock()の処理このサブプロシージャでは、子ウィンドウを開くJavaScriptを生成して登録します。InsertScriptBlockは、エクスポートのボタンをクリックしたときに、ボタンのOnCommandイベントから呼ばれます。行69-71では、JavaScriptのwindow.open()メソッドの引数に指定するオプションを生成しています。Withでは、StringBuilderのAppend()メソッドで以下のJavaScriptを生成しています。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ページがロードされたときにクライアント側のブラウザから実行されます。CreateDataSet()関数の処理この関数は、データベースからレコードを抽出してDataSetを作成して返します。CreateDataSetは、BindDataGrid()から呼ばれます。CreateDataSetのの引数には、strSQLとstrConnectionStringを指定します。strSQLには、データベースからレコードを抽出するSELECTステートメントを指定します。strConnectionStringには、Web.Configに登録されている<add>タグのkeyを指定します。strConnectionStringを省略したときは、デフォルトとしてconStringAccNwを使用します。</script>◆サブプログラムPopupExport.aspxの解説(HTML編)PopupExport.aspxには、DataGridを定義しています。DataGridは、Excel、Word、HTML形式でエクスポートするときに使用します。XML形式でエクスポートするときは、DataSetを使用します。行79-111では、DataGridを定義しています。このDataGridには、AutoGenerateColumnsプロパティにFalseを設定してカラムの自動生成機能を抑止しています。Webページをポストバックさせないため、EnableViewStateプロパティにFalseを設定してViewStateに保存しないようにしています。DataGridをHTMLに変換するときはCssClassプロパティが無効になりますのでWebコントロールの厳密に型指定されたCSSプロパティ(BackColor、ForeColorなど)を使用します。メインプログラムのDataGridでは、CssClassを使用して背景色、前景色を設定していますが、サブプログラムでは、型指定されたCSSプロパティを使用しています。カラムの幅は、ItemStyle-Widthプロパティに設定します。DataGridがExcel、Wordにエクスポートされたときに、カラム幅が狭いと2行で表示されますので1行で表示させるには、ItemStyle-Widthの値を調整します。</html>◆サブプログラムPopupExport.aspxの解説(コード編)PopupExport.aspxは、DataGridに表示されている得意先テーブルをHTML形式に変換してExcel、Wordにエクスポートします。XML形式でエクスポートするときは、DataSetを使用します。Page_Load()イベントの処理このイベントは、ページがロードされたときに発生します。このイベントでは、DataGridを選択したデータ形式でエクスポートします。行8では、RequestのParamsプロパティからQueryStringを取得しています。QueryStringには、エクスポートするデータ形式(Excel、Word、HTML、XML)が指定されています。Paramsプロパティの代わりにQueryStringプロパティを使用することもできます。Excel行9-10では、StringWriterとHtmlTextWriterのインスタンスを生成しています。HtmTextWriterとStringWriterは、DataGridをHTML形式に変換するときに使用します。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上に表示されます。Response.End()行19-23では、DataGridをHTML形式に変換してWordにエクスポートします。HTMLをWordのデータとして送信するには、ResponseのContentTypeプロパティにapplication/mswordを設定します。Explorer)に表示します。HTMLデータとしてブラウザに送信するには、ResponseのContentTypeプロパティにtext/htmlを設定します。Explorer)に表示します。行31では、得意先テーブルからレコードを抽出するSQLを生成しています。行32では、CreateDataSet()関数を呼び出してDataSetを作成します。行33では、DataSetのDataSetNameプロパティにCustomersを設定しています。DataSetNameプロパティは、XMLのルートノードを生成するときに使用します。DataSetからXMLデータを生成するには、DataSetのGetXml()メソッドを使用します。XMLデータをブラウザに送信するには、ResponseのContentTypeプロパティにtext/xmlを設定します。BindDataGrid()の処理このサブプロシージャでは、DataGridに得意先テーブルをバインドして表示します。BindDataGridは、Page_Loadイベントから呼ばれます。CreateDataSet()関数の処理この関数は、データベースからレコードを抽出してDataSetを作成して返します。CreateDataSetは、BindDataGrid()から呼ばれます。CreateDataSetのの引数には、strSQLとstrConnectionStringを指定します。strSQLには、データベースからレコードを抽出するSELECTステートメントを指定します。strConnectionStringには、Web.Configに登録されている<add>タグのkeyを指定します。strConnectionStringを省略したときは、デフォルトとしてconStringAccNwを使用します。</script>NoteResponseのContentTypeプロパティが有効にならないときの対処ResponseのContentTypeプロパティにMIMEタイプを指定しても有効にならないときは、ResponseのCharsetプロパティに空白を設定します。DataGrid2のホームへ戻る。