2012-05-22 2 views
0

У меня есть DataList и внутри него у меня есть DropDownList:как найти контроль DropDownList внутри DataList

<asp:DataList ID="dlconfigureItem" runat="server"> 
    <ItemTemplate> 
    <asp:DropDownList CssClass="config-select" ID="ddlitem runat="server"></asp:DropDownList> 
    </ItemTemplate> 
    </asp:DataList> 

Как я могу получить SelectedIndexChanged событие DropDownList на стороне сервера? Я пробовал:

public void ddlitem_selectedindexchanged (object sender, EventArgs e) 
    { 

    } 

но он не работает.

+0

Не уверен, если это тип о, но вы также не хватает закрытие "по вашему идентификатору вашего выпадающего списка. –

ответ

1

Из SelectedIndexChanged случае проще всего забрасывать sender к DropDownList

var ddl = (DropDownList)sender; 

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

Для полноты картины из ItemDataBound в DataList:

protected void dlconfigureItem_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
    DropDownList ddlitem = e.Item.FindControl("ddlitem") as DropDownList; 
    if (ddlitem != null) 
    { 
     // ... 
    } 
} 

Edit: Вы забыли зарегистрировать событие?

<asp:DropDownList CssClass="config-select" 
    ID="ddlitem" 
    OnSelectedIndexChanged="ddlitem_selectedindexchanged"  
    runat="server"> 
</asp:DropDownList> 

Обратите внимание, что вы не должны связывать свой DataList ему это DataSource на постбэков, в противном случае события не срабатывает. Поэтому проверьте наличие свойства IsPostBack страницы.

Например, в page_load:

if(!IsPostBack)BindDataList(); 
0

Не уверен, что если вы не можете получить выбранный элемент на сервере, или вы не можете найти способ обработки события. В случае, если ваша проблема с обработкой событий, попробуйте этот

<asp:DataList ID="dlconfigureItem" runat="server"> 
    <ItemTemplate> 
    <asp:DropDownList CssClass="config-select" ID="ddlitem" 
     OnSelectedIndexChanged="ddlitem_selectedindexchanged" 
     AutoPostBack="true" runat="server"></asp:DropDownList> 
    </ItemTemplate> 
    </asp:DataList> 
1

Вы определили метод на стороне сервера:

public void ddlitem_selectedindexchanged (object sender, EventArgs e) 
{ 

} 

но вы не сказали на стороне клиента, что это событие для вас, так в html-коде скажите:

onselectedindexchanged="ddlitem_selectedindexchanged" 

а также установить свойство AutoPostBack в true.

+0

и yeh, как сказал Тим:« Обратите внимание, что вы не должны привязывать свой DataList к его DataSource при обратных передачах, иначе события не будут запускаться ». Также проверьте его. –

0

Зарегистрируйте событие и установить AutoPostBack="true"

<asp:DropDownList CssClass="config-select" 
    ID="ddlitem" 
    AutoPostBack="true" 
    OnSelectedIndexChanged="ddlitem_selectedindexchanged"  
    runat="server"> 
</asp:DropDownList> 

событие (от выбранного изменения индекса вы можете получить выбранное значение)

protected void ddlCategory_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     var ddlList = (DropDownList)sender; 
     string selectedValue = ((DropDownList)ddlList.NamingContainer.FindControl("ddlitem")).SelectedValue; 
    }