2011-09-07 2 views
0

장바구니 ListView 선택 및 삭제 방법이있는 사용자 지정 개체를 기반으로 컨트롤이 있습니다. ListView에서 ImageButton은 기본적으로 삭제 아이콘이며 CommandName 매개 변수는 CommandName="Delete"으로 설정되어 있습니다.비즈니스 로직 계층 메서드에서 ListView 업데이트

내 문제는 삭제할 때 ListView 장바구니를 업데이트하는 것과 관련이 있습니다. delete 메소드가 사용자 정의 비즈니스 엔티티 객체에 저장되어 있으므로 장바구니 내에서 계산을 업데이트하는 데 문제가 있습니다 (항목을 삭제하여 배송, 세금 등을 다시 계산해야 함).

지금 당장 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이라고하는 다른 이벤트 인수 멤버에 할당 할 수 있습니다. 예를 들어 : e.ReturnValue 이후

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

Object로 전달됩니다, 당신은 필요에 따라 캐스팅 e.AffectedRows를 업데이트하는 데 필요한 정보가 특정 속성에 액세스 할 수 있습니다.

이 인수에 제공된 값은 ListView.ItemDeleted 이벤트로 전달됩니다.

+0

흠, ListView에서 항목 삭제시 메서드가 트리거되는 동안 AffectedRows는 -1 인 것으로 나타났습니다. 어떤 아이디어? –

+0

사용자 정의 비즈니스 로직을 위해 ObjectDataSource를 사용한다고 가정 할 수 있습니까? – lsuarez

+0

예, ODS를 사용하고 있습니다. –

관련 문제