如何在VB.NET中利用ItemDataBound实现Repeater页脚统计总数
修正VB.NET Repeater控件ItemDataBound事件实现页脚统计总数
前端代码修正
先移除ItemTemplate中多余的</a>标签,修正后的前端代码如下:
<asp:Repeater ID="repGender" runat="server"> <HeaderTemplate> <table cellspacing="0" rules="all" border="1"> <tr> <th>Gender</th> <th>Total</th> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td> <%# Eval("GENDER")%> </td> <td style="text-align: center"> <%# Eval("TOTAL")%> </td> </tr> </ItemTemplate> <FooterTemplate> <tr style="font-weight: bold"> <td>Grand Total</td> <td style="text-align: center"> <asp:Label runat="server" ID="lblTotal"></asp:Label> </td> </tr> </table> </FooterTemplate> </asp:Repeater>
后端代码修正
需要做以下调整:
- 在页面类级别声明
Total变量,确保统计过程中值不会被重置 - 修正
DataBinder.Eval的字段参数为"TOTAL",正确获取每行的统计值 - 使用VB.NET正确的条件判断语法(用
=而非==,并用ElseIf判断页脚项) - 在页脚项中找到
lblTotal控件并赋值统计结果
修正后的后端代码:
' 在页面类级别声明统计变量 Private Total As Integer = 0 Protected Sub repGender_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles repGender.ItemDataBound If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then ' 累加每行的TOTAL值 Total += Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "TOTAL")) ElseIf e.Item.ItemType = ListItemType.Footer Then ' 找到页脚中的Label并赋值总统计数 Dim lblTotal As Label = DirectCast(e.Item.FindControl("lblTotal"), Label) If lblTotal IsNot Nothing Then lblTotal.Text = Total.ToString() End If End If End Sub
注意:如果Repeater会被多次绑定(比如分页或重新查询),需要在绑定数据的方法中添加Total = 0,避免统计值累加错误。
内容的提问来源于stack exchange,提问作者hlzoic
相关产品推荐
相关产品推荐

