中继器页脚总数

时间:2013-07-11 14:14:53

标签: asp.net vb.net repeater

我有点难过为什么这不起作用,我可能做错了。

我有一个带有Amount列中值的转发器,我想在转发器的页脚中显示该列的总数。

问题是Total总是显示0并且没有添加行的值。

代码背后

Protected Sub reCosts_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles reCosts.ItemDataBound

        Dim rowView As System.Data.DataRowView
        rowView = CType(e.Item.DataItem, System.Data.DataRowView)

        Dim CostsTotal As Decimal

        If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then


            Dim lCostAmount As Literal = CType(e.Item.FindControl("lCostAmount"), Literal)
            Dim CostAmount As Decimal = rowView("Amount")
            lCostAmount.Text = CostAmount.ToString("C2")


            CostsTotal += CostAmount


        ElseIf e.Item.ItemType = ListItemType.Footer Then

            Dim lCostsTotal As Literal = CType(e.Item.FindControl("lCostsTotal"), Literal)
            lCostsTotal.Text = CostsTotal.ToString("C2")

        End If

    End Sub

任何帮助都将不胜感激。

学家

2 个答案:

答案 0 :(得分:3)

正在发生的事情是每次绑定一个项时都会声明CostsTotal变量,并在绑定页脚时重置为零。

您需要添加一个保存在ViewState中的属性,如下所示:

Public Property [CostsTotal] As String
   Get
       Return CStr(ViewState("CostsTotal"))
   End Get
   Set
       ViewState("CostsTotal") = Value
   End Set
End Property

另外请确保删除此行:

Dim CostsTotal As Decimal

答案 1 :(得分:1)

@hutchonoid是对的。问题是每次绑定项目时CostsTotal都设置为0。但是,你不应该把它放在viewstate中。如果它在视图状态中,那么CostsTotal += CostsTotal将在每次回发时发生,因为它会被保留。

Dim CostsTotal As Decimal移至页面顶部,以便在每次回发时从0开始。