【问题标题】:How to ReCreate Dynamically generated webcontrols which has an On_click event如何重新创建具有 On_click 事件的动态生成的 web 控件
【发布时间】:2014-05-08 06:16:08
【问题描述】:

当前场景: Decimal 数据类型输入选择的主 DDL 生成一个新的 DDL。从新的 DDL 中选择输入后,它会生成两个标签和两个带有 + 按钮的文本框。

当前问题:如果我单击 + 按钮,最近生成的动态 Web 控件将被隐藏。如何避免控件的隐藏并在每个+按钮点击事件上不断生成它们

我的 C# 代码:

protected void Page_Load(object sender, EventArgs e)
    {                      
        if (!IsPostBack)
        {
            BindDropDownLists();
        }

        else
        {
            if (!String.IsNullOrEmpty(DropDownList5.SelectedValue))
            {
                if (DropDownList5.SelectedValue == "decimal")
                {
                    createdynamiccontrols_decimal();
                }                                                        
            }

        }
    }

protected void DropDownList5_SelectedIndexChanged(object sender, EventArgs e)
     {

     }

    protected void createdynamiccontrols_decimal()
     {
         int i = DropDownList5.SelectedIndex;
         ++i;
         TableRow row = new TableRow();
         row.ID = "TableRow_" + i.ToString();
         TableCell cell1 = new TableCell();

         DropDownList Range_DDL_Decimal = new DropDownList();
         Range_DDL_Decimal.ID = "RandeDDL_Decimal" + i.ToString();
         Range_DDL_Decimal.Items.Insert(0, new ListItem("--Select--", "--Select--"));
         Range_DDL_Decimal.Items.Insert(1, new ListItem("Equal", "Equal"));
         Range_DDL_Decimal.Items.Insert(2, new ListItem("NotEqual", "NotEqual"));
         Range_DDL_Decimal.Items.Insert(3, new ListItem("greater than", "greater than"));
         Range_DDL_Decimal.Items.Insert(4, new ListItem("lesser than", "lesser than"));
         Range_DDL_Decimal.Items.Insert(5, new ListItem("greater than or equal to", "greater than or equal to"));
         Range_DDL_Decimal.Items.Insert(6, new ListItem("lesser than or equal to", "lesser than or equal to"));
         Range_DDL_Decimal.Items.Insert(7, new ListItem("Contains", "Contains"));
         Range_DDL_Decimal.Items.Insert(8, new ListItem("Is Null", "Is Null"));
         Range_DDL_Decimal.Items.Insert(9, new ListItem("Is Not Null", "Is Not Null"));
         Range_DDL_Decimal.Items.Insert(10, new ListItem("Between", "Between"));

         Range_DDL_Decimal.AutoPostBack = true;
         Range_DDL_Decimal.SelectedIndexChanged += new System.EventHandler(Range_DDL_Decimal_SelectedIndexChanged);

         cell1.Controls.Add(Range_DDL_Decimal);

         //// Add the TableCell to the TableRow  
         row.Cells.Add(cell1);

          dynamic_filter_table.Rows.Add(row);
          dynamic_filter_table.EnableViewState = true;
          ViewState["dynamic_filter_table"] = true;

     }

 protected void Range_DDL_Decimal_SelectedIndexChanged(object sender, EventArgs e)
     {
         int j = DropDownList5.SelectedIndex;
         ++j;

         TableRow rowtwo;
         rowtwo = new TableRow();

         TableCell cell1 = new TableCell();
         TableCell cell2 = new TableCell();
         TableCell cell3 = new TableCell();

         TextBox tb1 = new TextBox();
         TextBox tb2 = new TextBox();

         Label lbl1 = new Label();
         Label lbl2 = new Label();

         // Set a unique ID for each TextBox added      
         tb1.ID = "lowerbound_" + j.ToString();
         tb2.ID = "upperbound_" + j.ToString();
         lbl1.Text = "LowerBound:";
         lbl1.Font.Size = FontUnit.Point(10);
         lbl1.Font.Bold = true;
         lbl1.Font.Name = "Arial";

         lbl2.Text = "UpperBound:";
         lbl2.Font.Size = FontUnit.Point(10);

         lbl2.Font.Bold = true;
         lbl2.Font.Name = "Arial";

         Button addmore = new Button();
         addmore.ID = "Button_Decimal" + j.ToString();
         addmore.Text = "+";
         addmore.Click += new System.EventHandler(Addmore_click);
         **//If this button is clicked the Dynamic controls are vanished**
         cell1.Controls.Add(lbl1);
         cell1.Controls.Add(tb1);
         cell2.Controls.Add(lbl2);
         cell2.Controls.Add(tb2);

         cell3.Controls.Add(addmore);


         rowtwo.Cells.Add(cell1);
         rowtwo.Cells.Add(cell2);
         rowtwo.Cells.Add(cell3);

         dynamic_filter_table.Rows.Add(rowtwo);

         dynamic_filter_table.EnableViewState = true;
         ViewState["dynamic_filter_table"] = true;

     }

protected void Addmore_click(object sender, EventArgs e)
     {
       **//Generate dynamic controls on every click of + button 
       //How to procced**
     }

 protected void Page_PreInit(object sender, EventArgs e)
     {
     }

【问题讨论】:

    标签: c# asp.net web-controls


    【解决方案1】:

    没有隐藏,你必须在每个请求上重新创建动态创建的控件。

    已经有一段时间了,但我认为您必须在 Page_Init 事件中创建动态控件才能将它们包含在视图状态中。

    Somesources

    【讨论】:

    • 我知道并尝试了它们,但无法修复,并且最近生成的按钮单击事件在回发后没有被调用
    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2014-03-06
    • 2017-07-22
    • 1970-01-01
    相关资源
    最近更新 更多