2009-06-08 2 views
2

DetailsView 컨트롤에 바인딩하는 ObjectDataSource가 있습니다. 데이터 레이어로 호출하는 비즈니스 레이어에서 작성된 insert 메서드가 있고 모든 것이 잘 작동합니다. 삽입 메서드가 실행되기 전에 다른 작업을 수행 할 때까지. 비즈니스 계층으로 이동하기 전에 파일 업로드 컨트롤에 액세스해야합니다. 그래서 DetailsView에 ItemCommand 이벤트를 연결했습니다.이 이벤트를 선택하면 FileUpload 컨트롤로 필요한 것을 할 수 있습니다. 이 경우 비즈니스 레이어에서 insert 메서드를 호출합니다.이 메서드는 ObjectDataSource 컨트롤에 지정된 것과 동일한 메서드입니다. 그러나 Insert 메서드는 두 번 발생합니다! 이것을 잠시 생각한 후에 이것이 예상되는 동작임을 알게되었습니다. ItemCommand 이벤트에서 호출되면 한 번, ObjectDataSource InsertMethod에서 두 번째로 호출됩니다.ObjectDataSource 삽입 메서드

나는 단순히 그 방법에 이중 화재를 제거하기 위해 ObjectDataSource를에서하여 InsertMethod 속성을 제거 할 수 있다고 생각,하지만 난이 오류가 있음을 수행 할 때

Inserting is not supported by ObjectDataSource 'objStudentDetails' unless the InsertMethod is specified.

그래서 내가 말할 수있는 방법이있다 메서드를 시작하지 않는 ObjectDataSource? 아래 코드의 코드를 참조하십시오.

답변

5

ObjectDataSource에서 Inserting 이벤트를 처리 할 수없는 이유가 있습니까? 원한다면 삽입을 취소하는 방법조차 있습니다.

그냥 마크 업에 ObjectDataSource를에 이벤트 처리기를 추가 (또는 사용하는 디자이너) :

<asp:ObjectDataSource id=CustomerObjectDataSource" runat="server" 
    oninserting="CustomerObjectDataSource_Inserting" 
</asp:ObjectDataSource> 

이 이벤트가 발생을 바로 삽입하기 전에, 당신이 전파을 중지해야하는 경우, 당신은 뭔가를 할 수 좋아요 :

protected void CustomerObjectDataSource_Inserting(object sender, ObjectDataSourceMethodEventArgs e) 
{ 
    InsertMethod(someParams); 

    //If you are satisfied with what has already been done.. 
    e.Cancel = true;  
} 
+0

위대한 작품! 내가 어떻게 그것을 놓쳤는 지에 관해 명확히하지 않는다 - 감사합니다! – Tone

+0

좋은 통찰력. –

관련 문제