动态生成的DropDownList Web控件隐藏在选定的上

时间:2014-05-05 09:38:06

标签: c# asp.net drop-down-menu web-controls dynamically-generated

我在创建动态网页控件方面遇到了麻烦。我有一个带有DataTextField =" All_Columns"的SQL Databounded DropDownlist。和DataValueField =" DATA_TYPE"。

在DropDownList1_SelectedIndexChanged上,我必须检查数据类型为十进制或Varchar为Selected值。如果是十进制,我必须调用Createdynamicwebcontrols_decimal()并创建DropDownList2。如果是varchar,我必须调用Createdynamicwebcontrols_varchar()。

当前问题:在DropDownList2_SelectedIndexChanged时,我必须创建两个动态文本框,并且必须保留输入值,并在Button Click事件的帮助下搜索并显示JQGrid中的数据。但DDL控件完全隐藏

如何实现上述所有功能。需要帮助。动态Web控件的新功能。

Aspx代码:

<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#代码:

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 个答案:

答案 0 :(得分:0)

您可以在以下链接中找到源代码和示例: http://www.codeproject.com/Articles/20714/Dynamic-ASP-NET-control-creation-using-C

我也在网上找到了这个代码,我希望它可以帮到你:你可以根据你的需要在这个代码中修改它。点击另一个按钮就会添加按钮。

向表单添加新控件非常简单。

您所要做的就是像任何其他类一样创建一个新的控件实例。 例如:

Button NewButton = new button();

然后填写控件的属性。

NewButton.Text = "My New Button";

完成此设置后的事件处理程序。

NewButton.Click += new EventHandler(NewButton_Click);

然后在按钮处理程序中告诉您按下了哪个动态按钮,使用sender参数。

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

CurrentButton.Text = "I was clicked";
}

然后最后设置按钮的最后一步是将控件添加到表单。

this.Controls.Add(NewButton);