回发中的动态控件

时间:2011-11-08 14:07:24

标签: asp.net gridview postback dynamic-controls

我正在尝试将一组LinkBut​​tons添加到UpdatePanel中GridView的PagerRow。我正在使用RowCreated事件来实例化并添加这些事件。我遇到的问题是点击处理程序仅在第二次触发。

我使用

创建LinkBut​​tons
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

要自己创建LinkBut​​tons,我正在使用

    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,并为每个按钮的点击添加一个事件处理程序。在每个回发中,都会重新创建寻呼机行,因此旧按钮将替换为新设置,并且它们的事件处理程序仅在第二次单击时触发。如果我检查!IsPostBack,第一次点击后按钮就会消失。单击按钮后,我尝试重新绑定网格,并且页面大小发生了变化,但同样的事情发生了。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

为了正确触发EventHandler,您需要在Page Init / PreInit上绑定它。

制作会话指示符并在回发时,在页面初始化上检查该会话。

如果满足条件,而不是在RowCreated事件上重新创建它,而是重新创建控件以及Page Init上的事件。

这次,事件将正确触发。