Day03-3
目的
GridViewコントロールのテンプレート機能を利用する
レッスンの狙い
TemplateFieldクラスの利用方法を学習する。TemplateFieldクラスを利用することで、その他のXxxxxFieldクラスでは実現できないような列レイアウトを定義することも可能
GridViewコントロールのテンプレート化
XxxxxFieldクラスで、GridViewのカスタマイズが可能であるがさらに細かいカスタマイズを実施したい時、テンプレートを利用する。- 1つの列に複数のフィールドを表示したい
- グリッド上の入力要素に対して、検証コントロールを適用したい
- 1つの列に複数のフィールドを表示したい
手順
フィールドダイアログから該当フィールドを選択- [このフィールドをTemplateFieldに変換します]リンクをクリック
- [GridViewタスク]> [テンプレートの編集]をクリック
- [表示]欄から編集したい列とテンプレートの種類を選択
TemplateFieldコントロールで定義可能なテンプレート
| プロパティ | 概要 |
|---|---|
HeaderTemplate |
ヘッダ |
ItemTemplate |
参照モード(通常のデータ行) |
AltermatingItemTemplate |
参照モード(交互に表示されるデータ行) |
EditItemTemplate |
編集モード |
FooterTemplate |
フッタ |
テンプレートへのデータのバインド
手順
- コントロール右肩のボタン > タスクメニュー > [DataBindingの編集…]を選択
- [<コントロール名>DataBindings]ダイアログ > バインド対象のプロパティを選択
Bind("title")を入力
解説
- 上記の手順を行うことで、
Textプロパティにtitleフィールドをバインドできる。- 第2引数として書式文字列を指定することも可能
Bind("published", "{0:yyyy/MM/dd}")
- 第2引数として書式文字列を指定することも可能
Bind/Evalメソッド
Bind(フィールド名,書式文字列)- 双方向のバインディング
Eval(フィールド名,書式文字列)- 読み取り専用
Tips: データバインド構文
<asp:TemplateField HeaderText="書名" SortExpression="title">
<ItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Bind("title") %>'
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
解説
<asp:TemplateField>要素の配下に<XxxxxTemplate>要素でそれぞれのテンプレートを定義している。Textプロパティの値として<%# Bind("title") %>が指定されている。 => データバインド構文
さまざまなボタンコントロール
- ASP.NET3.5で利用可能なボタンコントロールは下記の3つ
| コントロール | 概要 |
|---|---|
| Button | 通常のボタン |
| LinkButton | ハイパーリンク式のボタン |
| ImageButton | 画像つきのボタン |
LinkButtonコントロールは、Clickイベントが発生するので注意
OnClientClickプロパティ
- ボタンクリック時に実行すべきクライアントサイドスクリプト(JavaScript)を指定する。
OnClientClickプロパティを使用することで、クライアントサイドスクリプトを直接プロパティ値として指定することが可能になる。
例: ボタンクリック時に動作の確認をしたい場合
OnClientClickプロパティに下記の値を設定する。
return confirm("削除してもよろしいですか?")
PostBackUrlプロパティ
ポストバックとは
- ポストバックとは通常、自分自身に対してポストデータを送信することを言う。
- ASP.NETで異なるページにデータを送信したい場合はどのようにすればよいか?
PostBackUrlを使用する
PostBackUrlプロパティを使用することで、異なるページにデータを送信することができる。- このような仕組みをページ間ホスティングという。
使用方法
PostBackUrlプロパティに送信先のURLを指定する。- ページの受け側では送信元ページの情報を取得するために下記の様なコードを記述する必要がある。
-
例えば、送信元ページの
TextBoxコントロール、txtNameの値を取得するDim txtName As TextBox = DirectCast(Page.PreviousPage.FindControl(“txtName”), TextBox) lblResult.Text = txtName.Text
まとめ
GridViewコントロールをはじめとしたデータアクセスコントロールでは、TemplateFieldクラスを利用することで
列のレイアウトを自由にカスタマイズできる。
テンプレート化された列にデータソースから取得した値をバインドするには、バインド式を指定する。
バインド式には、Bind、Evalメソッドいずれか指定することができる。
Bindメソッド: 読み書き可能な両方向バインディングEvalメソッド: 読み込みのみ可能な片方向バインディング ボタンコントロールには、Button,LinkButton,ImageButtonなどがある。