У меня есть список. В моем списке у меня есть dropdownbox, который я хочу заполнить на моей странице кода. Только дело в том, что я не знаю, как получить доступ к этому webcontrol. Не работает следующее:
DropDownList ddl = (DropDownList)lvUserOverview.Controls[0];
Я знаю, что индекс равен 0, потому что раскрывающийся список является единственным элементом управления списком (также когда я пытаюсь индексировать 1, я получаю исключение индекса за пределами диапазона).
Может ли кто-нибудь сказать мне, как я могу получить доступ к выпадающему списку? В моей странице я хочу добавить listitems.
Код ASPX:
<asp:DropDownList ID="ddlRole" onload="ddlRole_Load" runat="server">
</asp:DropDownList>
Codebehind:
protected void ddlRole_Load(object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)lvUserOverview.FindControl("ddlRole");
if (ddl != null)
{
foreach (Role role in roles)
ddl.Items.Add(new ListItem(role.Description, role.Id.ToString()));
}
}
Чтобы получить дескриптор выпадающего списка внутри собственного обработчика события загрузки, вам нужно только указать отправителя как DropDownList.
DropDownList ddlRole = sender as DropDownList;
Если это отображается в ListView, тогда существует вероятность того, что будут созданы несколько DropDownLists, каждый получит уникальный идентификатор, и вы не сможете использовать подход Мэтью.
Возможно, вы захотите использовать событие ItemDataBound для доступа к e.Item.FindControl( "NameOfDropDownList" ), который позволит вам выполнять итерацию при каждом раскрывающемся меню.
Если вы только создаете... почему он находится в ListView?
Попробуйте следующее:
DropDownList ddl = (DropDownList)lvUserOverview.FindControl("NameOfDropDownList");
Если ваши элементы управления связаны данными, убедитесь, что вы пытаетесь получить доступ к их потомкам после привязки данных. Я также могу помочь просто осмотреть объекты в отладчике до этой строки.