我有点难过为什么这不起作用,我可能做错了。
我有一个带有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
任何帮助都将不胜感激。
学家
答案 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
开始。