DataGridにメモ型のフィールドを表示するサンプル

図 DataGridにメモ型のフィールドを表示するサンプル
このサンプルは、DataGridに社員テーブルをバインドして表示しています。DataGridの上にレコードの編集ボタン
と件数が表示されますが、このサンプルでは編集ボタンを使用不可にしています。DataGridには、社員テーブルの社員ID、氏名、支社、部署、出身地、入社日、誕生日、備考を表示しています。入社日と誕生日は、yy/mm/ddの形式で表示しています。備考には、データベースのメモ型のフィールドを表示していますので、上下のスクロールボタン▲、▼をクリックしてスクロールできるようにしています。
◆プログラムDataGridEmployee.aspxのポイント
¶ポイント1 DataGridにメモ型のフィールドを表示してスクロールさせるには
このサンプルでは、DataGridのTemplateColumnに社員テーブルの備考を表示しています。備考をスクロールさせるには、CSSのoverflowプロパティを使用します。overflowには、visible、scroll、hidden、autoなどを設定することができます。autoを設定すると、すべてのデータが表示できないとき自動的にスクロールバーが表示されます。visibleを設定したときは、すべてのデータが表示されます。overflowプロパティを使用するときは、CSSのheight、widthプロパティも同時に指定します。
<asp:TemplateColumn HeaderText="備考">
<ItemTemplate>
<div style="height:25; width:300; overflow:auto;">
<%# Container.DataItem("Notes") %>
</div>
</ItemTemplate>
</asp:TemplateColumn>
overflow: auto
overflow: visible
overflow: hidden
overflow: scroll
図 上から順番にoverflowプロパティに auto, visible, hidden, scrollを設定して表示した例
¶ポイント2 ImageButtonを使用できないようにするには
このサンプルでは、ImageButtonで
(iconUpdate.gif)のイメージを表示しています。このImageButtonのEnabledプロパティには、Falseを設定して使用不可にしています。EnabledにFalseを設定したときは、ImageButtonをクリックしてもOnCommandイベントが発生しません。ところが、ImageButtonにマウスを移動するとカーソルが「手」の形状に変化してボタンが有効になっているように錯覚します。この不都合を回避するには、CSSのcursorプロパティにhelpを設定してカーソルがヘルプ「?」に変化するようにします。このとき、ヘルプ情報としてImageButtonのTitleプロパティに設定した「Disabled!」が表示されます。さらに、CSSのfilterプロパティにalpha(opacity=20)を設定してイメージをディミング(薄くぼんやり見えるように)します。
.imageButtonOff {
cursor:help;
filter: alpha(opacity=20);
}
<asp:ImageButton id="ibtnUpdate" runat="server"
CommandName="update"
OnCommand="ibtnUpdate_Command"
ImageUrl="../img/update.gif"
Title="Disabled!"
CssClass="imageButtonOff"
Enabled="False" />
◆プログラムDataGridEmployee.aspの解説(HTML編)
DataGridEmployee.aspxのHTML編について解説します。行153-160のImageButtonでは、レコード編集ボタンを定義しています。ImageButtonを使用不可にするには、EnabledプロパティにFalseを設定します。CssClassプロパティには、以下のようなCSSを設定してカーソルの形状を変えて、イメージをディミイングしています。
.imageButtonOff {
cursor:help;
filter: alpha(opacity=20);
}
153:
<asp:ImageButton id="ibtnUpdate" runat="server"
158:
CssClass="imageButtonOff"
160: Enabled="False" />
行161-167では、LabelとTextBoxを使用してレコード件数を表示しています。TextBoxのReadOnlyプロパティには、Trueを設定して読み込み専用にしています。レコード件数は、ランタイム時に設定します。
行180-247では、DataGridを定義しています。このDataGridでは、AutoGenerateColumnsプロパティにFalseを設定してカラムの自動生成機能を抑止しています。行194-246の<Columns>…</Columns>では、TemplateColumnとBoundColumnを定義しています。行195-205のTemplateColumnでは、ItemTemplateにLinkButtonを定義しています。このLinkButtonは、レコードセレクターとして使用します。
行206-210のBoundColumnでは、社員テーブルの社員IDをバインドしています。後続するBoundColumnでは、氏名、支社、部署、出身地をバインドしています。行227-234のBoundColumnでは、入社日と誕生日をバインドしています。これらのBoundColumnには、DataFormatStringプロパティに{0:yy/MM/dd}を設定して日付を、yy/mm/ddの形式で表示しています。
行235-245のTemplateColumnでは、ItemTemplateに<div>…</div>タグを定義しています。<div>のstyle=には、CSSのoverflowプロパティにautoを設定しています。行239では、データ連結タグ<%#...%>で社員テーブルの備考をバインドしています。備考がCSSのheight:25、width:300で設定した領域に表示できないときは、自動的にスクロールバーが表示されます。行243のItemStyleでは、備考の背景色と前景色を設定しています。ItemStyeを使用すると、DataGridのカラム毎に背景色、前景色を設定することができます。
235: <asp:TemplateColumn
236:
HeaderText="<div class='dgrdHeader'>備考</div>">
237:
<ItemTemplate>
238:
<div style="height:25; width:300; overflow:auto; font-size: 90%">
239:
<%#
Container.DataItem("Notes") %>
240:
</div>
241:
</ItemTemplate>
243:
<ItemStyle BackColor="Lavender" ForeColor="Gray" />
245:
</asp:TemplateColumn>
備考の行数を調整するには、CSSのheightプロパティを書き換えます。たとえば、4行で表示するにはheight:50を設定します。この場合、備考が4行以内に収まるときは、スクロールバーが表示されません。

図 CSSのheightプロパティを調整して備考を4行で表示した例
リスト DataGridEmployee.aspxのソースコード(HTML編)
|
134: <html>
201:
Visible="True" /> |
◆プログラムDataGridEmployee.aspの解説(コード編)
DataGridEmployee.aspxは、DataGridに社員テーブルのメモ型のフィールドをスクロールバーつきで表示します。
Sub Page_Load()イベントの処理
このイベントは、DataGridEmployee.aspxがロードされたときに実行されます。このイベントでは、DataGridに社員テーブルをバインドして表示します。
行11-20のIf…Else…End Ifでは、ページが最初にロードされたか調べています。最初にロードされたときは、BindDataGrid()を呼び出して、DataGridに社員テーブルをバインドします。ページがポストバックされたときは、Session変数に保存されているDataTableを取得します。Session変数にDataTableが保存されていないときは、BindDataGrid()を呼びます。
|
9: Sub Page_Load() |
Sub dgrdEmployees_ItemDataBound()イベントの処理
このイベントは、DataGridのDataBind()メソッドが実行されたときに発生します。このイベントでは、DataGridのアイテム(DataGridItem)にクライアント側で動作するonClickイベントを登録します。これにより、DataGridの任意のセルをクリックして行を選択できるようになります
|
56: Sub
dgrdEmployees_ItemDataBound(s As Object, e As DataGridItemEventArgs) |
Sub BindDataGrid()の処理
このサブプロシージャでは、DataGridに社員テーブルをバインドして表示します。BindDataGridは、Page_Loadイベントから呼ばれます
行80では、社員テーブルからレコードを抽出するSQLを生成しています。SELECTステートメントには、Top 10のオプションを指定していますので、社員テーブルから10件のレコードが抽出されます。行81では、CreateDataSet()関数を呼び出して、社員テーブルのDataSetを作成しています。
行83では、DataSetのTablesコレクションから社員テーブルのDataTableを作成しています。行86-93のWith…End Withでは、DataSetにDataTableをバインドしています。行94では、DataTableのRo
|
79: 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" />
|
121: Function CreateDataSet(strSQL As String, _ |
リスト DataGridEmployee.aspxのソースコード(コード編)
|
1: <%@ Page language="vb"
SmartNavigation="false" %> |