repeater control last row

G

Guoqi Zheng

Sir,

According to our design, very often, I need to have a different html code
for the last row of our repeater control. I can not put those code
difference into footer because those code has to be in the last data row.

How can I edit the last data row of a repeater control??

--
Kind regards

Guoqi Zheng
guoqi AT meetholland dot com
Http://www.meetholland.com
 
D

Dale

Create your own repeater control, inheriting
System.Web.UI.WebControls.Repeater and then implement your ITemplate. In
the ITemplate, you can add code to respond to whatever conditions dictate
the HTML code and provide the right output.

Here's a link for a simple custom repeater that will give you a place to
start:

http://coltkwong.com/blogs/juliet/posts/467.aspx

Dale Preston
MCAD, MCSE, MCDBA
 
K

Ken Cox [Microsoft MVP]

Hi Guoqi,

In the Page object's PreRender event you already know how many items there
are in the repeater. Therefore, you can get a reference to the last item and
do whatever needs to be done with it. Here's a snippet, full source below:

Private Sub Page_PreRender _
(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyBase.PreRender
Dim itm As RepeaterItem
itm = Repeater1.Items(Repeater1.Items.Count - 1)
Dim lblNotice As New Label
lblNotice.Text = "Last>>>"
itm.Controls.AddAt(0, lblNotice)
End Sub

Does this help?

Ken
Microsoft MVP [ASP.NET]
Toronto


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()

End Sub

Private Sub Page_PreRender _
(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyBase.PreRender
Dim itm As RepeaterItem
itm = Repeater1.Items(Repeater1.Items.Count - 1)
Dim lblNotice As New Label
lblNotice.Text = "Last>>>"
itm.Controls.AddAt(0, lblNotice)
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

<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>

<asp:Label id="Label3" runat="server">
<%# DataBinder.Eval(Container, "DataItem.StringValue") %>
</asp:Label>
<br>
</ItemTemplate>
</asp:Repeater>
 
G

Guoqi Zheng

Thanks, that sounds like what I am after, I will try it out.

--
Kind regards

Guoqi Zheng
guoqi AT meetholland dot com
Http://www.meetholland.com

Ken Cox said:
Hi Guoqi,

In the Page object's PreRender event you already know how many items there
are in the repeater. Therefore, you can get a reference to the last item and
do whatever needs to be done with it. Here's a snippet, full source below:

Private Sub Page_PreRender _
(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyBase.PreRender
Dim itm As RepeaterItem
itm = Repeater1.Items(Repeater1.Items.Count - 1)
Dim lblNotice As New Label
lblNotice.Text = "Last>>>"
itm.Controls.AddAt(0, lblNotice)
End Sub

Does this help?

Ken
Microsoft MVP [ASP.NET]
Toronto


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()

End Sub

Private Sub Page_PreRender _
(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyBase.PreRender
Dim itm As RepeaterItem
itm = Repeater1.Items(Repeater1.Items.Count - 1)
Dim lblNotice As New Label
lblNotice.Text = "Last>>>"
itm.Controls.AddAt(0, lblNotice)
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

<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>

<asp:Label id="Label3" runat="server">
<%# DataBinder.Eval(Container, "DataItem.StringValue") %>
</asp:Label>
<br>
</ItemTemplate>
</asp:Repeater>


Guoqi Zheng said:
Sir,

According to our design, very often, I need to have a different html code
for the last row of our repeater control. I can not put those code
difference into footer because those code has to be in the last data row.

How can I edit the last data row of a repeater control??

--
Kind regards

Guoqi Zheng
guoqi AT meetholland dot com
Http://www.meetholland.com
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top