Question

J'ai une listview. Dans ma liste, j'ai une liste déroulante que je veux remplir ma page codebehind. Le seul problème est que je ne sais pas comment accéder à ce contrôle Web. Ce qui suit ne fonctionne pas:

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

Je sais que l'index est 0 car la liste déroulante est le seul contrôle de la liste (même lorsque j'essaie l'index 1, j'obtiens une exception d'index hors plage).

Quelqu'un peut-il me dire comment accéder à la liste déroulante? Dans ma page arrière, je veux ajouter des éléments de liste.

Code 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()));
  }
}
Était-ce utile?

La solution

Pour obtenir un descripteur de la liste déroulante à l'intérieur de son propre gestionnaire d'événements Load, il vous suffit de convertir l'expéditeur en tant que DropDownList.

DropDownList ddlRole = sender as DropDownList;

Autres conseils

Si cela est rendu dans une ListView, il est possible que plusieurs listes DropDownLists soient instanciées. Chacune recevra un identifiant unique et vous ne pourrez pas utiliser l'approche de Matthew.

Vous pouvez utiliser l'événement ItemDataBound pour accéder à e.Item.FindControl (" NameOfDropDownList "), ce qui vous permettra d'itérer sur chaque liste déroulante créée.

Si vous n'en créez qu'un ... pourquoi c'est dans un ListView?

Essayez ceci:

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

Si vos contrôles sont liés aux données, assurez-vous d’essayer d’accéder à leurs descendants après la liaison des données. Je peux aussi aider à inspecter des objets dans le débogueur avant cette ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top