2017-11-09 2 views
0

비슷한 방법으로 여러 GridView가있는 aspx 웹 응용 프로그램이 있습니다. 내 생각은 재사용 가능한 메서드가있는 "도우미"클래스를 만드는 것이 었습니다. 내 질문은 그 원격 클래스 메서드를 활용하는 가장 좋은 방법은 무엇입니까?GridView 이벤트에 원격 메소드 추가

프론트 엔드는이 같은 class.method 동의하지 않습니다 내가를 Page_Load에 처리기를 부착 할 때

<asp:GridView runat="server" ID="myGridView" ... OnSorting="myClass.reusableMethod" 

비주얼 스튜디오 나에게 어떤 컴파일 오류를 포기하지 않았다,하지만 내 말은 런타임 오류가 발생했습니다 GridView는 이벤트를 발생 시키려고 시도했지만 거기에 없었습니다.

if (!IsPostBack) 
{ 
    myGridView.Sorting += myClass.reusableMethod; 
} 

최종적인 방법은 작동하지만 반발을 일으키는 것 같습니다. 페이지에서 백엔드 메소드를 정상적으로 만들었지 만 원격 메소드에 대한 호출로 유일한 라인을 가지는 것

public void myGridView_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    myClass.reusableMethod(); 
} 

답변

1

할 수 있습니다. 먼저 OnSorting 이벤트를 GridView에서 제거하십시오.

<asp:GridView ID="myGridView" runat="server" AllowSorting="true"> 

그런 다음이 방법을 IsPostBack 검사 외부에만 바인딩하십시오.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //do not bind the event here 
    } 

    //but here 
    myGridView.Sorting += myClass.reusableMethod; 
} 

이제 당신은! IsPostBack을 기본적으로 처음 페이지 타격을 의미하지 않는 방법

public static void reusableMethod(object sender, GridViewSortEventArgs e) 
{ 
    GridView gv = sender as GridView; 
} 
+0

를 사용할 수 있습니까? 왜 그게 효과가 없을까요? 아니면 gridview가 포스트 백에서 핸들러를 잃어 버리는가? 따라서 코드는 다시 게시 후에 처리기를 다시 추가하지 않습니까? – toadfromgrove

+0

예. 그러나 이벤트를 동적으로 바인딩하기 때문에 모든 페이지로드시에이를 수행해야합니다. 그렇지 않으면 PostBack에서 손실됩니다. 그리고 그것이 분실되면 그것은 촉발하지 않을 것입니다. – VDWWD

+0

좋아, 나는 그것이 포스트 백에 할당을 잃을 것이라는 것을 몰랐다. 이제는 의미가 있습니다. 고맙습니다! – toadfromgrove

관련 문제