В моем ListView
у меня есть ItemTemplate
и EditItemTemplate
, которые выглядят примерно так, соответственно.
------->
Когда я нажимаю кнопку «Изменить», и она переключается на представление EditItemTemplate
справа, я хочу предварительно заполнить Textbox
и выбрать соответствующий option
в DropDownList
. Как я могу это сделать?
Прежде чем вы скажете использовать что-то вроде следующего, пожалуйста, знайте, что я уже изучил все возможные варианты, которые я могу придумать. Извините, что так требовательно, но, пожалуйста, будьте готовы провести меня через это, если вы ответите. ^. ^ Я застрял в этом вопросе буквально на месяцы: (
Dim lv As ListView = DirectCast(sender, ListView) 'sender is the ListView on the ItemCommand event
Dim ddl As DropDownList = DirectCast(lv.Items(0).FindControl("NewProductName_ddl"), DropDownList)
Dim tb As TextBox = DirectCast(lv.Items(0).FindControl("NewProductName_tb"), TextBox)
ОБНОВЛЕНИЕ - RAWR !!
О, черт возьми, Боже, ТАК ЗАКРЫТЬ, но без сигары. Следующий код работал для предварительной заливки, когда в ListView был только один элемент, но когда существует более одного элемента, он генерирует исключение NullReferenceException : (
'PROBLEM WAS HERE: Compare to the working code in my answer.
Protected Sub NewProduct_ItemDataBound(ByVal sender As ListView, ByVal e As ListViewItemEventArgs) Handles NewProduct.ItemDataBound
If sender.EditIndex > -1 Then
Dim ddl As DropDownList = DirectCast(e.Item.FindControl("NewProductName_ddl"), DropDownList)
Dim tb As TextBox = DirectCast(e.Item.FindControl("NewProductName_cb"), TextBox)
ddl.Items.FindByValue(sender.DataKeys(sender.EditIndex)("ID").ToString).Selected = True 'Prefills the DropDownList
tb.Text = sender.DataKeys(sender.EditIndex)("Product").ToString 'Prefills the TextBox
End If
End Sub