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
などがある。