C # Как получить доступ к выпадающему списку в виде списка? - PullRequest
2 голосов
/ 16 июня 2009

У меня есть список. В моем списке просмотра у меня есть выпадающий список, который я хочу заполнить на странице кода. Единственное, я не знаю, как получить доступ к этому веб-контролю. Следующее не работает:

DropDownList ddl = (DropDownList)lvUserOverview.Controls[0];

Я знаю, что индекс равен 0, потому что выпадающий список является единственным элементом управления в представлении списка (также, когда я пытаюсь выполнить индекс 1, я получаю исключение индекса из диапазона).

Может кто-нибудь сказать мне, как я могу получить доступ к выпадающему списку? На своей странице я хочу добавить элементы списка.

Код 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()));
  }
}

Ответы [ 4 ]

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

Если это визуализируется в ListView, есть вероятность, что будут созданы несколько DropDownList, каждый получит уникальный идентификатор, и вы не сможете использовать подход Мэтью.

Возможно, вы захотите использовать событие ItemDataBound для доступа к e.Item.FindControl ("NameOfDropDownList"), который позволит вам выполнять итерацию для каждого созданного раскрывающегося списка.

Если вы создаете только один ... почему он находится в ListView?

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

Чтобы получить дескриптор выпадающего списка внутри его собственного обработчика события Load, все, что вам нужно сделать, это привести отправителя в качестве DropDownList.

DropDownList ddlRole = sender as DropDownList;
0 голосов
/ 16 июня 2009

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

0 голосов
/ 16 июня 2009

Попробуйте это:

DropDownList ddl = (DropDownList)lvUserOverview.FindControl("NameOfDropDownList");
...