2009-06-01 1 views
1

Я создаю выпадающий список в коде для gridview. Я хочу создать AddHandler, поэтому я могу получить доступ к выбранному значению. Однако здесь (Rowdatabound) обработчик добавления не запускается. Как мне это сделать?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

Это кажется странным способом сделать что-то.

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

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

+0

ОК, вы определенно на что-то. Вместо того, чтобы динамически делать это, я просто добавил элемент управления. Еще один вопрос ... где бы я добавил событие onclick в раскрывающийся список? Мне нужно установить значение на стороне клиента – Eric

+0

Nevermind, я получил его. – Eric

+1

Эрик, не могли бы вы добавить, как вы решили проблему? – mikemurf22

1

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

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