Martijn
Martijn

Reputation: 24789

C# How to access a dropdownbox in a listview?

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

Upvotes: 2

Views: 2647

Answers (4)

Bryan Batchelder
Bryan Batchelder

Reputation: 3637

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;

Upvotes: 1

Dmitry Tashkinov
Dmitry Tashkinov

Reputation: 1994

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.

Upvotes: 0

Lazarus
Lazarus

Reputation: 43084

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?

Upvotes: 2

Matthew Jones
Matthew Jones

Reputation: 26190

Try this:

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

Upvotes: 0

Related Questions