繁体   English   中英

查找动态添加的控件

[英]find dynamically added controls

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

我试过了

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

首先,您应该创建一个函数,该函数在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);

希望对您有所帮助。

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

You should be adding controls inside another control for example a panel * 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();
 }

//对于实例,让一个下拉列表并将其添加到名为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
     }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM