AddHandler没有在rowdatabound中触发

时间:2009-06-01 17:50:36

标签: .net asp.net vb.net gridview drop-down-menu

我正在为gridview的代码创建一个下拉列表。我想创建一个AddHandler,这样我就可以访问selectedvalue了。但是,这里(Rowdatabound)add处理程序不会被触发。我应该怎么做呢?

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    ''//------------ Does not fire off add handler -----

    Dim deptvalue As String
    Dim ddlmgr As New DropDownList

    AddHandler ddlmgr.SelectedIndexChanged, AddressOf ddlmgr_SelectedIndexChanged

    ddlmgr.AutoPostBack = True
    ddlmgr.Items.Clear()
    ddlmgr.Items.Insert(0, "--Select a Manager--")
    ddlmgr.AppendDataBoundItems = True
    ddlmgr.DataTextField = "Name"
    ddlmgr.DataValueField = "number"
    ddlmgr.DataSource = SqlDataSource2
    ddlmgr.DataBind()

    ''//deptvalue = GridView1.Rows(i).Cells(0).Text
    deptvalue = e.Row.Cells(0).Text
    ddlmgr.Attributes.Add("onchange", "setDepart('" & deptvalue & "')")

    If e.Row.RowType <> DataControlRowType.Pager And _
       e.Row.RowType <> DataControlRowType.Header And _
       e.Row.RowType <> DataControlRowType.Footer Then
        e.Row.Cells(2).Controls.Add(ddlmgr)
    End If
End Sub

2 个答案:

答案 0 :(得分:2)

这似乎是一种奇怪的做事方式。

看起来您在gridview的每个rowdatabound事件上绑定相同的数据。如果下拉项在每行中相同且不受gridview行中任何其他信息的影响,则这是不必要的。相反,在页面加载时,我会将数据存储在字典中(看起来像名称/值数据),然后将其绑定到每个下拉列表。

另外,我不明白为什么要动态地将下拉列表添加到每个gridview行。为什么不添加控件并连接OnLoad事件以绑定上面的数据。您也可以像上面尝试的那样连接OnSelectedIndexChanged事件。

答案 1 :(得分:1)

当您的ddlmgr SelectedIndexChanged触发时,会启动新的回发。这意味着您现在正在使用页面类的全新实例。您之前创建事件处理程序的旧程序已经消失。

要在您需要时触发事件,您必须在恢复状态之前重新创建新回发的控件,否则将不会重新建立事件处理程序。