views:

559

answers:

4

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.

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()));
  }
}
A: 

Try this:

DropDownList ddl = (DropDownList)lvUserOverview.FindControl("NameOfDropDownList");
Matthew Jones
The ID of my dropdownlist is set to ddlRole. When I use DropDownList ddl = (DropDownList)lvUserOverview.FindControl("ddlRole"); it doesn't work.
Martijn
Post your ASPX code for the ListView, maybe there is a problem with it.
Matthew Jones
See my startpost
Martijn
+1  A: 

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?

Lazarus
See my startpost
Martijn
A: 

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.

Dmitry Tashkinov
+1  A: 

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;
Bryan Batchelder
Thnx. Is it possible to send an extra parameter? Maybe so that eventArgs gets an extra property? something like this: <asp: dropdownlist ... onload="ddl_load(id)"> and in the codebehind in the load event: e.id Hope you get what I mean.
Martijn