2011-09-07 34 views
0

我有一个购物车ListView控制由具有选择和删除方法的自定义对象支持。在ListView中,其中一列是ImageButton,它本质上是一个删除图标,CommandName参数设置为CommandName="Delete"正在从业务逻辑层方法更新ListView

我的问题是关于更新购物车ListView删除;由于删除方法存储在自定义业务实体对象中,因此我无法更新购物车内的计算(我们删除了一个项目,因此我需要重新计算运费,税金等)。

现在,我有购物车ListView控件调用它的页面加载计算方法Not Page.IsPostBack,但显然这不是由delete方法触发的。

当我的自定义业务逻辑中的控件范围之外发生删除操作时,如何处理调用删除时的calculate方法的任何建议?

回答

2

考虑将重新计算方法绑定到您的ListViewItemDeleted Event。例如:

Sub ShoppingCartListView_ItemDeleted(sender As Object, e As ListViewDeletedEventArgs) Handles ShoppingCartListView.ItemDeleted 

    ' Determine whether an exception occurred 
    If e.Exception Is Nothing Then 
     ' Ensure that a record was deleted. 
     If e.AffectedRows > 0 Then 
      ' Call recalculation method 
      CalculateCharges() 
     End If 
    Else 
     ' Handle e.Exception 
     HandleMyException(e.Exception) 
    End If 
End Sub 

老实说,错误检查的AffectedRows可能是有点多余了你的使用情况,但它绝不会伤害知道什么信息提供给您的ListViewDeletedEventArgs

编辑:

如果需要支持添加到您的业务逻辑就受交易影响的行数信息,确保首先由ObjectDataSource.DeleteMethod财产调用的方法有一个返回值,要么是一个整数,要么有一个属性或函数将返回一个。接下来,为您的ObjectDataSource.Deleted事件添加一个处理程序。在这里,您可以将包含在事件参数中的方法的返回值分配给另一个类似名为AffectedRows的事件参数成员。例如:

Sub BusinessObjectDataSource_Deleted(sender as Object, e As ObjectDataSourceStatusEventArgs) Handles BusinessObjectDataSource.Deleted 
    e.AffectedRows = CInt(e.ReturnValue) 
End Sub 

由于e.ReturnValue传递在为Object,你可以将它转换为需要和访问具有更新e.AffectedRows所需的信息的任何特定属性。

提供给这些参数的值将传递到您的ListView.ItemDeleted事件。

+0

嗯,只是注意到,虽然该方法是从ListView项删除触发,AffectedRows是-1。有任何想法吗? –

+0

我可以假设您正在使用ObjectDataSource来进行自定义业务逻辑吗? – lsuarez

+0

是的,我正在使用ODS。 –