2

我有一个列表视图。在我的列表视图中,我有一个下拉框,我想填写我的代码隐藏页面。唯一的问题是,我不知道如何访问这个 web 控件。以下不起作用:

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

我知道索引是 0,因为下拉列表是列表视图上的唯一控件(当我尝试索引 1 时,我得到一个索引超出范围异常)。

有人可以告诉我如何访问下拉列表吗?在我的 pagebehind 中,我想添加列表项。

ASPX 代码:

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

代码隐藏:

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

4 回答 4

2

如果这是在 ListView 中呈现的,那么有可能会实例化多个 DropDownList,每个都将获得一个唯一的 ID,您将无法使用 Matthew 的方法。

您可能希望使用 ItemDataBound 事件来访问 e.Item.FindControl("NameOfDropDownList") ,这将允许您迭代创建的每个下拉列表。

如果您只创建一个...为什么它在 ListView 中?

于 2009-06-16T13:49:37.457 回答
1

要在其自身的 Load 事件处理程序中获取下拉列表的句柄,您只需将 sender 转换为 DropDownList。

DropDownList ddlRole = sender as DropDownList;
于 2009-06-16T16:27:22.617 回答
0

试试这个:

DropDownList ddl = (DropDownList)lvUserOverview.FindControl("NameOfDropDownList");
于 2009-06-16T13:42:17.300 回答
0

如果您的控件是数据绑定的,请确保在数据绑定后尝试访问它们的后代。我也可以帮助在该行之前检查调试器中的对象。

于 2009-06-16T13:50:30.093 回答