Pergunta

Eu tenho uma ListView. No meu ListView, tenho uma caixa suspensa que quero preencher minha página CodeBehind. Só o problema é que não sei como acessar este WebControl. O seguinte não funciona:

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

Eu sei que o índice é 0 porque a lista suspensa é o único controle no ListView (também quando tento o índice 1, recebo um índice de exceção do intervalo).

Alguém pode me dizer como posso acessar a lista suspensa? Na minha página, eu quero adicionar listiTems.

Código ASPX:

<asp:DropDownList ID="ddlRole" onload="ddlRole_Load" runat="server">
</asp:DropDownList>

Código por trás:

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()));
  }
}
Foi útil?

Solução

Para obter uma alça na lista suspensa dentro de seu próprio manipulador de eventos de carga, tudo o que você precisa fazer é lançar o remetente como uma lista suspensa.

DropDownList ddlRole = sender as DropDownList;

Outras dicas

Se isso estiver sendo renderizado em uma ListView, há uma chance de que várias listas suspensas sejam instanciadas, cada uma terá um ID exclusivo e você não poderá usar a abordagem de Matthew.

Você pode usar o evento ItemDatabound para acessar o e.item.findcontrol ("nameofdropdownlist"), que permitirá que você itera em cada suspensão criada.

Se você está criando apenas um ... por que está em uma ListView?

Experimente isso:

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

Se seus controles estiverem vinculados aos dados, tente acessar seus descendentes após a ligação dos dados. Também posso ajudar a inspecionar objetos no depurador antes dessa linha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top