AddHandler не запускается в строке данных - PullRequest
1 голос
/ 01 июня 2009

Я создаю выпадающий список в коде для сетки. Я хочу создать AddHandler, чтобы иметь доступ к выбранному значению. Однако здесь (Rowdatabound) обработчик добавления не срабатывает. Как мне поступить об этом?

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 ]

2 голосов
/ 01 июня 2009

Это кажется странным способом делать вещи.

Похоже, что вы привязываете одни и те же данные к каждому событию, связанному со строкой в ​​строке вида сетки. Это не нужно, если выпадающие элементы одинаковы в каждой строке и не подвержены влиянию какой-либо другой информации в строке вида сетки. Вместо этого, при загрузке страницы я бы сохранял данные в словаре (выглядит как данные имя / значение) и затем связывал их с каждым выпадающим списком.

Кроме того, я не могу понять, почему вы динамически добавляете выпадающий список в каждую строку сетки. Почему бы не добавить элемент управления и подключить событие OnLoad, чтобы связать данные выше. Вы также можете подключить событие OnSelectedIndexChanged, как вы пытаетесь сделать выше.

1 голос
/ 01 июня 2009

Когда срабатывает SelectedIndexChanged вашего ddlmgr, начинается новый постбэк. Это означает, что вы сейчас работаете с новым экземпляром вашего класса страниц. Старый, где вы ранее создали обработчик событий, исчез.

Чтобы событие сработало, когда вы этого хотите, вам нужно заново создать элемент управления для новой обратной передачи до восстановления состояния , иначе обработчик события не будет переустановлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...