【问题标题】:Updating ListView from Business Logic Layer Method从业务逻辑层方法更新 ListView
【发布时间】:2011-09-07 05:18:33
【问题描述】:

我有一个购物车ListView 控件,该控件由一个自定义对象支持,该对象具有选择和删除方法。在ListView 中,其中一列是ImageButton,它本质上是一个删除图标,CommandName 参数设置为CommandName="Delete"

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

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

当删除发生在我的自定义业务逻辑中的控件范围之外时,关于在哪里处理调用计算方法的任何建议?

【问题讨论】:

    标签: asp.net vb.net listview


    【解决方案1】:

    考虑将您的重新计算方法绑定到您的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 事件。

    【讨论】:

    • 嗯,刚刚注意到,当从 ListView 删除项目时触发该方法时,AffectedRows 为 -1。有什么想法吗?
    • 我可以假设您将 ObjectDataSource 用于您的自定义业务逻辑吗?
    猜你喜欢
    • 2010-12-18
    • 2011-12-03
    • 2011-11-26
    • 2017-04-29
    • 2016-08-12
    • 2014-09-04
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多