Question

I have a listview. In my listview I have a dropdownbox which I want to fill in my codebehind page. Only the thing is, I don't know how to access this webcontrol. The following doesn't work:

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

I know the index is 0 because the dropdownlist is the only control on the listview (also when I try index 1 I get a index out of range exception).

Can someone tell me how i can access the dropdownlist? In my pagebehind I want to add listitems.

ASPX Code :

<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()));
  }
}
Was it helpful?

Solution

To get a handle to the drop down list inside of its own Load event handler, all you need to do is cast sender as a DropDownList.

DropDownList ddlRole = sender as DropDownList;

OTHER TIPS

If this is being rendered in a ListView then there's a chance that multiple DropDownLists are going to be instantiated, each will get a unique ID and you wouldn't be able to use Matthew's approach.

You might want to use the ItemDataBound event to access e.Item.FindControl("NameOfDropDownList") which will allow you to iterate on each dropdown created.

If you are only creating one... why it is in a ListView?

Try this:

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

If your controls are data bound, make sure you try to access their descendents after data binding. I may also help just inspecting objects in debugger before that line.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top