1

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

我在 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

任何帮助,将不胜感激。

J。

4

2 回答 2

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
于 2013-07-11T14:36:09.170 回答
1

@hutchonoid是对的。问题是CostsTotal每次绑定项目时都设置为 0。但是,您不应该将其置于视图状态中。如果它处于视图状态,那么CostsTotal += CostsTotal将在每次回发时发生,因为它被持久化了。

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

于 2013-07-11T14:48:31.023 回答