Dynamically Generated DropDownList web controls hi

2019-09-16 09:02发布

问题:

I am facing troubles in creation of dynamic web controls. I have a SQL Databounded DropDownlist with DataTextField ="All_Columns" and DataValueField="DATA_TYPE".

Upon DropDownList1_SelectedIndexChanged i must check for the datatype as decimal or Varchar for the Selected value. If it is decimal i must call Createdynamicwebcontrols_decimal() and create DropDownList2. If it is varchar i must call Createdynamicwebcontrols_varchar().

Current Issue: Upon DropDownList2_SelectedIndexChanged i must create two dynamic textboxes and input values must be retained and search and display the data in a JQGrid with the help of Button Click event. But the DDL control hides completely

How to achieve above all features. Help needed please. New to dynamic web controls.

Aspx Code:

<asp:DropDownList ID="DropDownList5" runat="server" DataSourceID="column_list_for_filter" DataTextField="All_Columns" DataValueField="DATA_TYPE" OnSelectedIndexChanged ="DropDownList5_SelectedIndexChanged"  AutoPostBack="true" >
            </asp:DropDownList>
            <asp:SqlDataSource ID="column_list_for_filter" runat="server" ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString %>" SelectCommand="SELECT COLUMN_NAME AS 'All_Columns', DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = 'TABLE')"></asp:SqlDataSource>

C# code:

protected void Page_Load(object sender, EventArgs e)
    {     
        Panel6.Visible = false;
        JQGrid9.Visible = false;

        if (Session["DataforSearch"] != null)
        {
            Panel6.Visible = true;
            JQGrid9.Visible = true;
            JQGrid9.DataSource = Session["DataforSearch"] as string;

        }

    }

protected void Page_PreInit(object sender, EventArgs e)
     {

         //How to Proceed
     }

   protected void DropDownList5_SelectedIndexChanged(object sender, EventArgs e)
     {
       if(DropDownList5.SelectedValue == "decimal")
      {
          createdynamiccontrols_decimal();
      }

       else if(DropDownList5.SelectedValue == "int")
      { 
          createdynamiccontrols_int();
      }

       else if(DropDownList5.SelectedValue == "varchar")
      {
          createdynamiccontrols_varchar();
      }

    //How to Proceed

     }

 protected void createdynamiccontrols_decimal()

     {
         int i = DropDownList5.SelectedIndex;
         ++i;
         TableRow row;
         row = new TableRow();

         TableCell cell1;
         cell1 = new TableCell();

         //DropDownList2
         DropDownList Range_DDL;
         Range_DDL = new DropDownList();
         Range_DDL.ID = "RandeDDL" + i.ToString();
         Range_DDL.Items.Insert(0, new ListItem("--Select--", "--Select--"));
         Range_DDL.Items.Insert(1, new ListItem("Equal", "Equal"));
         Range_DDL.Items.Insert(2, new ListItem("NotEqual", "NotEqual"));
         Range_DDL.Items.Insert(3, new ListItem("greater than", "greater than"));
         Range_DDL.Items.Insert(2, new ListItem("lesser than", "lesser than"));
         Range_DDL.Items.Insert(2, new ListItem("greater than or equal to", "greater than or equal to"));
         Range_DDL.Items.Insert(2, new ListItem("lesser than or equal to", "lesser than or equal to"));
         Range_DDL.Items.Insert(2, new ListItem("Contains", "Contains"));
         Range_DDL.Items.Insert(2, new ListItem("Is Null", "Is Null"));
         Range_DDL.Items.Insert(2, new ListItem("Is Not Null", "Is Not Null"));
         Range_DDL.Items.Insert(2, new ListItem("Between", "Between"));
         Range_DDL.AutoPostBack = true;
         Range_DDL.SelectedIndexChanged += new System.EventHandler(Range_DDL_SelectedIndexChanged);

         cell1.Controls.Add(Range_DDL);


         //// 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;


     }

 //DropdownList2 to create dynamic text boxes
 protected void Range_DDL_SelectedIndexChanged(object sender, EventArgs e)
     {
         int j = DropDownList5.SelectedIndex;
         ++j;

         TableRow row;
         row = new TableRow();

         TableRow rowtwo;
         rowtwo = new TableRow();

         TableCell cell1;
         cell1 = new TableCell();

         TableCell cell2;
         cell2 = new TableCell();

         TableCell cell3;
         cell3 = new TableCell();

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

         lbl1 = new Label();
         Label lbl2;
         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;
         addmore = new Button();
         addmore.ID = "Button" + j.ToString();
         addmore.Text = "+";
         addmore.Click += new System.EventHandler(addmore_click);


         cell1.Controls.Add(lbl1);
         cell2.Controls.Add(tb1);
         cell2.Controls.Add(lbl2);
         cell2.Controls.Add(tb2);

         cell3.Controls.Add(addmore);

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

         dynamic_filter_table.Rows.Add(row);

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

     }

//Button Click to retrieve the input from dynamic generated text box and display in JQGrid.
 protected void Button1_Click(object sender, EventArgs e)
    {

             int j = DropDownList5.SelectedIndex;
             ++j;
             Panel6.Visible = true;
             JQGrid9.Visible = true;
             TextBox lowerboundd = dynamic_filter_table.FindControl("lowerbound_" + j.ToString()) as TextBox;

             TextBox upperbound = dynamic_filter_table.FindControl("upperbound_" + j.ToString()) as TextBox;

             con.Open();
             SqlDataAdapter da = new SqlDataAdapter("SELECT a,b,c FROM TABLE WHERE " + DropDownList5.SelectedValue + " >= " + lowerboundd.Text + " AND " + DropDownList5.SelectedValue + " <= " + upperbound.Text, con);
            **//Problems in retrieving the input of textboxes - Object Reference error**
             DataSet ds = new DataSet();
             da.Fill(ds);
             con.Close();
             Session["DataforSearch"] = ds.Tables[0];

      }

回答1:

You can find the source code and example on following link : http://www.codeproject.com/Articles/20714/Dynamic-ASP-NET-control-creation-using-C

I also found this code online, I hope it would help you: You can modify this according to your needs in this code Button is added on the click of an another button.

Adding a new control to a form is really easy.

All you have to do is create a new instance of the control like any other class. Eg:

Button NewButton = new button();

Then you fill out the properties of the control.

NewButton.Text = "My New Button";

After this setup an event handler.

NewButton.Click += new EventHandler(NewButton_Click);

Then in the button handler to tell which dynamic button was pressed you use the sender parameter.

void NewButton_Click(object sender, EventArgs e)
{
Button CurrentButton = (Button)sender;

CurrentButton.Text = "I was clicked";
}

Then finally the last step in setting the button up is to add the control to the form.

this.Controls.Add(NewButton);