|
.NET TIPS [ASP.NET]DataGridコントロールの行に通し番号を付けるには?デジタルアドバンテージ2003/10/03 |
![]() |
|
|
|
DataGridコントロールの使用時に、データソースとは無関係な「通し番号」を表示する列が必要となる場合がある。このような場合には、次の<asp:TemplateColumn>要素をDataGridコントロールの<Columns>要素に追加するだけでよい。プログラム・コードを追加する必要はない。
<asp:TemplateColumn HeaderText="No">
<ItemTemplate>
<%# Container.DataSetIndex + 1 %>
</ItemTemplate>
</asp:TemplateColumn>
「TIPS:[ASP.NET]DataGridコントロールで特定のカラムのみを表示するには?」の2番目のサンプル・プログラム(bounddg2.aspx)にこの要素を追加して実行した画面は次のようになる。
![]() |
| 通し番号を表示する列を追加したサンプル・プログラム(numberdg.aspx)の実行結果 |
このプログラムの全ソース・コードは次のようになる。太字部分が本稿で追加した個所だ。
|
|
| 通し番号を表示する列を追加したC#のサンプル・プログラム(numberdg.aspx) | |
追加した<asp:TemplateColumn>要素とその内容について次に解説する。
<asp:TemplateColumn>要素による列の定義
DataGridコントロールは、<Columns>要素により表示されるグリッドの列を定義する。<Columns>要素内で定義可能な列には次のような種類がある。
- BoundColumn:連結列(解説しているTIPS)
- HyperLinkColumn:ハイパーリンク列(解説しているTIPS)
- ButtonColumn:ボタン列(解説しているTIPS)
- EditCommandColumn:編集ボタン列(解説しているTIPS)
- TemplateColumn:テンプレート列
最後の「テンプレート列」を除いた4つの列は、汎用的に使用される、特定の種類の項目を表示するために用意されているものである。それ以外の非定型的な列を表示したい場合には、最後に挙げた「テンプレート列」を使用することになる。
テンプレート列では、独自のレイアウトを定義したテンプレートを用いるため、基本的にはどんな形式の列でも表示することできる。もちろんその代わり、記述は少々複雑なものになる。
例えば、データソースに指定したデータテーブルの特定カラムを列として表示するには、上記のサンプル・プログラムでも使用しているように、通常は連結列である<asp:BoundColumn>要素を使用して次のような記述となる。
<asp:BoundColumn DataField="title" HeaderText="タイトル" />
これはテンプレート列である<asp:TemplateColumn>要素を利用して、次のようにも記述できる。
<asp:TemplateColumn HeaderText="タイトル">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "title") %>
</ItemTemplate>
</asp:TemplateColumn>
テンプレート列ではまずヘッダ行の文字列をHeaderText属性で指定した<asp:TemplateColumn>タグを記述し、次にその列で表示される項目を<ItemTemplate>要素によって記述するのが基本的な使い方だ。
データを特定カラムにテキストとして表示するという用途であれば、<asp:BoundColumn>要素のおかげでずいぶん簡単に記述できることが分かるだろう。しかし、今回表示したい通し番号はデータソースから得られるものでないため、連結列などは使用できず、テンプレート列が必要となる。
DataGridItemクラスのDataSetIndexプロパティ
通し番号の基になるデータについては、データ連結時に各行で設定されるインデックス番号が利用できる。
「TIPS:[ASP.NET]DataGridコントロールの各セルにアクセスするには?」でも解説しているように、データ連結によりDataGridコントロール内には列を表すオブジェクトとしてDataGridItemクラス(System.Web.UI.WebControls名前空間)のオブジェクトがデータソースの要素数分作成される。このとき、DataGridItemオブジェクトのDataSetIndexプロパティには0から始まるインデックス番号がセットされる。よって、これに1を加えた値をそのまま行の通し番号として使用可能だ。
ここでは次のデータ連結式を用いて、インデックス番号に1を加えた値をテキストとして表示している。
<%# Container.DataSetIndex + 1 %>
「TIPS:[ASP.NET]Container.DataItemの正体は?」で解説しているように、DataGridコントロール内に記述したデータ連結式では、ContainerオブジェクトはDataGridItem型であり、データ連結処理中の行(DataGridItemオブジェクト)への参照が代入されている。よってキャストもなしに「Container.DataSetIndex」と記述すれば、その行のインデックス番号が取得できる。
もし書式付きで番号を表示したいのであれば、次のようにしてStringクラス(System名前空間)のFormatメソッドを使用可能だ。
<%# String.Format("{0:D4}", Container.DataSetIndex + 1) %>
この例では通し番号を0埋めの4桁(0001、0002、……)で表示する。
なお、DataGridコントロールで(既定の)ページングを行っている場合でも、DataSetIndexプロパティは正しく設定されるため、ここで示した通し番号表示は有効である。![]()
| カテゴリ:Webフォーム 処理対象:DataGridコントロール 使用ライブラリ:DataGridコントロール 使用ライブラリ:<asp:BoundColumn>要素 使用ライブラリ:<asp:TemplateColumn>要素 使用ライブラリ:DataGridItemクラス(System.Web.UI.WebControls名前空間) 使用ライブラリ:Stringクラス(System名前空間) 関連TIPS:[ASP.NET]DataGridコントロールで特定のカラムのみを表示するには? 関連TIPS:[ASP.NET]DataGridコントロールの各セルにアクセスするには? 関連TIPS:[ASP.NET]Container.DataItemの正体は? |
| 「.NET TIPS」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



