Reference a Label in a Repeater?

  • Thread starter Thread starter Tom Kaminski [MVP]
  • Start date Start date
T

Tom Kaminski [MVP]

On my code behind page, how can I reference a Label control that's included
in a Repeater?

In other words, given:

<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td><asp:Label ID="Label1"
runat="server"></asp:Label></td>

How can I reference Label1.Text in my VB code? (note that Label1 does not
get repeated as it's in the header)
 
if you want to use it from an event of that repeater such as ItemDataBound
you can use :
If e.Item.ItemType = ListItemType.Header Then
CType(e.Item.Controls(0).FindControl("Label1"), Label).Text = "Something"
End If
if you want to access it from other method you can use:

Repeater1.Controls(0).FindControl("Label1")

Regards
Martin
 
Hi Tom,

After you bind the repeater, you should be able to get it with

lblCntrl = Repeater1.Controls(0).FindControl("Label1")

Sample code below.

Ken


Private Sub Page_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Dim lblCntrl As Label
Repeater1.DataSource = CreateDataSource()
Repeater1.DataMember = "StringValue"
Repeater1.DataBind()
lblCntrl = Repeater1.Controls(0).FindControl("Label1")
lblCntrl.Text = "The new text"
End Sub
Function CreateDataSource() As DataTable
Dim dt As New DataTable
Dim dr As DataRow
dt.Columns.Add(New DataColumn _
("IntegerValue", GetType(Int32)))
dt.Columns.Add(New DataColumn _
("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn _
("CurrencyValue", GetType(Double)))
dt.Columns.Add(New DataColumn _
("Boolean", GetType(Boolean)))
Dim i As Integer
For i = 0 To 8
dr = dt.NewRow()
dr(0) = i
dr(1) = "Item " + i.ToString()
dr(2) = 1.23 * (i + 1)
dr(3) = (i = 4)
dt.Rows.Add(dr)
Next i
Return dt
End Function 'CreateDataSource


<form id="Form1" method="post" runat="server">
<ul>
<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td>
<asp:Label ID="Label1" runat="server">My label</asp:Label>
</td>
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:Label id="Label3" runat="server">
<%# DataBinder.Eval(Container, "DataItem.StringValue") %>
</asp:Label>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
</form>
 
Thanks.

I must be doing something wrong as when I use this code the repeater does
not render:
Dim myCtrl As Label = Repeater1.Controls(0).FindControl("Label1")

myCtrl.Text = "XXX"

If I comment those two lines out, it renders.
 
That's it! Thanks Ken.

Ken Cox said:
Hi Tom,

After you bind the repeater, you should be able to get it with

lblCntrl = Repeater1.Controls(0).FindControl("Label1")

Sample code below.

Ken


Private Sub Page_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Dim lblCntrl As Label
Repeater1.DataSource = CreateDataSource()
Repeater1.DataMember = "StringValue"
Repeater1.DataBind()
lblCntrl = Repeater1.Controls(0).FindControl("Label1")
lblCntrl.Text = "The new text"
End Sub
Function CreateDataSource() As DataTable
Dim dt As New DataTable
Dim dr As DataRow
dt.Columns.Add(New DataColumn _
("IntegerValue", GetType(Int32)))
dt.Columns.Add(New DataColumn _
("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn _
("CurrencyValue", GetType(Double)))
dt.Columns.Add(New DataColumn _
("Boolean", GetType(Boolean)))
Dim i As Integer
For i = 0 To 8
dr = dt.NewRow()
dr(0) = i
dr(1) = "Item " + i.ToString()
dr(2) = 1.23 * (i + 1)
dr(3) = (i = 4)
dt.Rows.Add(dr)
Next i
Return dt
End Function 'CreateDataSource


<form id="Form1" method="post" runat="server">
<ul>
<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td>
<asp:Label ID="Label1" runat="server">My label</asp:Label>
</td>
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:Label id="Label3" runat="server">
<%# DataBinder.Eval(Container, "DataItem.StringValue") %>
</asp:Label>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
</form>
 
What was the problem Tom ? are you cast the finded control to a label
control
Dim myCtrl As Label = CType(Repeater1.Controls(0).FindControl("Label1"),
Label)


Regards,
Martin
 
Back
Top