找到动态添加的控件

时间:2014-01-22 16:49:20

标签: c# asp.net c#-4.0 dynamic

我正在根据数据库条目的数量向我的页面添加下拉列表,当我按下按钮时,我想在每个下拉列表中获取所选值。

我试过这个

foreach(DropDownList a in Form.Controls.OfType<DropDownList>())
{
    Response.Write(a.SelectedValue);
}

但它在页面上找不到任何下拉列表。下面是我用来添加dorpdownlists的代码。

protected void Page_Init()
{
    string product = Request.QueryString["product"];
    foreach (productoption r in dbcon.GetOption(product))
    {
        TableRow row = new TableRow();
        TableCell cel1 = new TableCell();
        TableCell cel2 = new TableCell();
        DropDownList dropdown1 = new DropDownList();
        dropdown1.CssClass = "productdropdown";
        foreach (suboption f in dbcon.GetSubOption(r.ProductOptionID))
        {
            dropdown1.Items.Add(f.SubOptionName + " +$" +f.SubOptionPrice);
        }
        cel1.Text = "<b>" + r.OptionName + "</b>";
        cel2.Controls.Add(dropdown1);
        row.Cells.Add(cel1);
        row.Cells.Add(cel2);
        Table1.Rows.Add(row);
    }
    TableRow row2 = new TableRow();
    TableCell cell3 = new TableCell();
    Button cartbutton = new Button();
    cartbutton.ID = product;
    cartbutton.CssClass = "btn_addcart";
    cartbutton.Click += cartbutton_OnClick;
    cartbutton.Text = "Add to cart";
    cell3.Controls.Add(cartbutton);
    row2.Cells.Add(cell3);
    Table1.Rows.Add(row2);
}

3 个答案:

答案 0 :(得分:0)

首先,您应该创建一个在ControlCollection中查找控件类型的函数,并返回找到的控件列表。这样的事情:

    public List<T> GetControlsOfType<T>(ControlCollection controls)
    {
        List<T> ret = new List<T>();
        try
        {
            foreach (Control control in controls)
            {             
                    if (control is T)
                        ret.Add((T)((object)control));                            
                    else if (control.Controls.Count > 0)
                        ret.AddRange(GetControlsOfType<T>(control.Controls));                  
            }
        }
        catch (Exception ex)
        {
            //Log the exception
        }
        return ret;
    }

然后你可以得到所有DropDownList

List<DropDownList> ret = GetControlsOfType<DropDownList>(this.Page.Controls);

我希望它有所帮助。

答案 1 :(得分:0)

foreach (TabelRow row in Table1.Rows)
{
    if(row.Cells.Count > 0)
    {
        if (row.Cells[1].Controls.Count > 0 && row.Cells[1].Controls[0].GetType() ==  typeof(DropDownList))
        {
            Response.Write(a.SelectedValue); 
        }
    }
}

答案 2 :(得分:0)

<强> You should be adding controls inside another control for example a panel * Also you dont need to define controls at page init, you can do that at page load and they will retain their value *

 protected void Page_Load(object sender, EventArgs e)
 {
    loadControls();
 }

//对于Instance,我们可以使用下拉列表并将其添加到名为testpanel

的面板中
Protected void loadControls()
{
  DropdownList ddlDynamic = new DropdownList();
  //give this control an id
  ddlDynamic.Id = "ddlDynamic1"; // this  id is very important as the control can be found with same id
  //add data to dropdownlist
  //adding to the panel
  testpanel.Controls.Add(ddlDynamic);
}

//现在我们必须在帖子后面找到这个控件,例如按一下按钮

protected void btnPreviousSet_Click(object sender, EventArgs e)
     {
       //this will find the control here
       //we will you the same id used while creating control
       DropdownList ddlDynamic1 = testpanel.FindControl("ddlDynamic1") as DropdownList;
       //can resume your operation here
     }