ASP.NET Repeater内のコントロールにアクセスする方法
ASP.NET
でRepeater
内のコントロールにアクセスする方法を紹介します。
runat=serverをつける
Repeater
内のコントロールに限らず、サーバー処理でコントロールにアクセスしたい場合はrunat="server"
を設定します。
runat="server"
を設定しておけば、テキストボックスなどのコントロールだけではなく、div
やtable
などのhtml
の要素もアクセスできます。
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" />
</ItemTemplate>
</asp:Repeater>
FindControlで取得する
以下のように、Repeater
にバインドしたアイテムをループで回しながらFindControl
でコントロールを取得します。
For Each item As RepeaterItem In Repeater1.Items
Dim TextBox1 As TextBox = CType(item.FindControl("TextBox1"), TextBox)
Dim Button1 As Button = CType(item.FindControl("Button1"), Button)
Next
ItemDataBoundイベント
データをバインドしたタイミングでRepeater
内のコントロールに値をセットしたい場合があります。
バインドしたアイテム1件毎にItemDataBound
イベントが走るので、ここでRepeater
内のコントロールにアクセスし、値の設定やスタイルの変更などを行います。
(例えば3行のデータがあるDataTable
をバインドしたら3回ItemDataBound
イベントが発生する)
以下のDataTable
をバインドしたとします。
first_name | delflg |
---|---|
一郎 | 1 |
次郎 | 0 |
三郎 | 0 |
四郎 | 1 |
Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
Select Case e.Item.ItemType
Case ListItemType.Item, ListItemType.AlternatingItem
Dim TextBox1 As TextBox = CType(e.item.FindControl("TextBox1"), TextBox)
'値を設定
TextBox1.Text = CType(e.Item.DataItem, DataRowView).Item("first_name").ToString
Dim Button1 As Button = CType(e.item.FindControl("Button1"), Button)
If CType(e.Item.DataItem, DataRowView).Item("delflg").ToString = "1" Then
'delflg=1のデータはスタイルを設定
Button1.Style.Add("background-color", "red")
End If
End Select
End Sub