2011-11-08 3 views
0

UpdatePanel의 GridView PagerRow에 LinkButton 세트를 추가하려고합니다. RowCreated 이벤트를 사용하여 인스턴스화하고 추가합니다. 내가 가진 문제는 클릭 핸들러가 두 번째에만 해고된다는 것입니다.포스트 백의 동적 컨트롤

나는, 내가

Dim lnkSize = New LinkButton() With { _, 
     .Text = size.ToString(), _ 
     .CommandArgument = size.ToString(), _ 
     .ID = "pageSizer" & size 
    } 
    AddHandler lnkSize.Click, AddressOf lnkPageSize_Click ' an EventHandler which just changes pagesize based on CommandArgument 
    liSize.Controls.Add(lnkSize) 

GridViewPageSizer 상속 HtmlGenericControl를 사용하고있어 LinkButtons 자신을 만들려면

Protected Sub grd_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 
    If (e.Row.RowType = DataControlRowType.Pager) Then 
     Dim pageSizer = New GridViewPageSizer(grdItems) 
     e.Row.Cells(0).Controls.AddAt(0, pageSizer) 
    End If 
End Sub 

를 사용하여 LinkButtons를 작성하고 각 버튼의 클릭에 대한 이벤트 처리기를 추가합니다. 모든 다시 게시에서 호출기 행이 다시 만들어 지므로 이전 단추가 새 집합으로 바뀌고 해당 이벤트 처리기는 두 번째 클릭 만 실행됩니다. IsPostBack을 확인하면 처음 클릭 한 후에 버튼이 사라집니다. 단추를 클릭하고 페이지 크기를 변경 한 후에 표를 다시 바인딩하려고 시도했지만 동일한 문제가 발생합니다. 이 문제를 해결할 방법이 있습니까?

답변

1

EventHandler를 올바르게 트리거하려면 페이지 Init/PreInit에 바인딩해야합니다.

세션 표시기를 만들고 포스트 백에서 페이지 초기화에서 해당 세션을 확인하십시오.

조건을 충족하는 경우 RowCreated 이벤트에서 다시 작성하는 대신 페이지 초기화 이벤트와 함께 컨트롤을 다시 만드십시오.

이번에는 이벤트가 올바르게 트리거됩니다.

+0

Page_Init의 컨트롤에 액세스 할 수 없으므로 문제가됩니다. 그들은 UserControl에있어 UserControl이 Page_Init 뒤의 DataBound 일 때까지 BottomPagerRow가 없습니다. – Echilon

관련 문제