我有一个combox.当选择1时就动态添加一个textbox,选择2时就动态添加两个textbox.依此类推
第一次选择时,我用下面代码:
              TextBox textBox3 = new TextBox();
                textBox3.Text = "33";
                textBox3.Name = "mytext_l_" + i.ToString();//长
                textBox3.Location = new Point(50, 220 + i * 50);
                textBox3.Size = new Size(50, 16);                TextBox textBox4 = new TextBox();
                textBox4.Text = "21";
                textBox4.Name = "mytext_w_" + i.ToString();//宽
                textBox4.Location = new Point(130, 220 + i * 50);
                textBox4.Size = new Size(50, 16);
foreach (Control c in Controls)
                {
                  
               if (c is TextBox && ((TextBox)c).Name.Contains("mytext_l_"))//长
                    {                        s[i3] = Convert.ToDouble(((TextBox)c).Text);                        num2[i3] = s[i3];
                        i3++;                    }
                    if (c is TextBox && ((TextBox)c).Name.Contains("mytext_w_"))//宽
                    {                        s[i4] = Convert.ToDouble(((TextBox)c).Text);                        num3[i4] = s[i4];
                        i4++;                    }
                   }
可以得到值,当我再选择combox中另一个值的时候就出问题了(比如,我第一次选择2,然后又选择3),就会出现读NULL值的情况。
不知大家是怎么解决,是先把动态添加的TEXTBOX去掉再添加新的textbox。

解决方案 »

  1.   

     Hashtable TextControls = new Hashtable();
                    string constr = ConfigurationManager.ConnectionStrings["Conn"].ConnectionString;
            SqlConnection conn = new SqlConnection(constr);        //select 'Column_name' = name  from syscolumns where id = (select  id from sysobjects where id = object_id ('" + taname + "')) order by colid        SqlCommand cmd = new SqlCommand(" select * from "+taname+"", conn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds,"ta");
            //Response.Write("<script>alert('" + ds.Tables["ta"].Columns[0].ColumnName.ToString()+ "');</script>");
          
            for (int i = 0; i < count; i++)  //有多少列就循环多少次动态生成文本框及标签
            {
                System.Web.UI.WebControls.TextBox txt = new TextBox();
                System.Web.UI.WebControls.Label la = new Label();            la.ID = "la" + i.ToString();
                la.Text = ds.Tables["ta"].Columns[i].ColumnName.ToString()+":  ";
                txt.ID = "txt" + i.ToString();
                //txt.Text = Request.QueryString["count"].ToString();
                TextControls.Add(la.ID, la);
                TextControls.Add(txt.ID, txt);
                // this.Control[0].Controls.Add(TextBox1);
                this.Panel1.Controls.Add(la);
                this.Panel1.Controls.Add(txt);
                //  }            //  }
    你稍微看看改一下就好
      

  2.   

    楼上的,你的不行拉,我是想知道第二次选择时怎么样不要取NULL值。
      

  3.   

    你的写法不灵活  参考下我帮你修改的
    画面上一个comboBox还有一个panel就可以了  执行通过
    private void Form3_Load(object sender, EventArgs e)
            {
                //comboBox初始化1,2,3这3个值
                this.comboBox1.Items.Add("1");
                this.comboBox1.Items.Add("2");
                this.comboBox1.Items.Add("3");
            }        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                //首先清空panel容器中的控件
                this.panel1.Controls.Clear();            TextBox tb = null;            int value = Convert.ToInt32(comboBox1.SelectedItem.ToString());            //增加控件
                for (int i = 0; i < value ; i++)
                {
                    //要在循环内New新控件  这样做法比较灵活
                    tb = new TextBox();
                    tb.Text = i.ToString();
                    tb.Location = new Point(10, 10 + i * 20); 
                    this.panel1.Controls.Add(tb);
                }
            }希望能给你点帮助
      

  4.   


    你的代码不是很完整  你写的所谓动态是自己TextBox textBox3 = new TextBox(); 然后又TextBox textBox4 = new TextBox(); 一下的话 这不是死的  永远都是2个textBox  你选3的时候就是要出3个控件 根据你上面的代码貌似还是2个textBox吧  所以找不到第三个吧
      

  5.   

    我一用panel,就动态添加不了textbox,所以没用panel
     for (int i = 0; i < n; i++)
                {
                    //TextBox mytextbox = new TextBox();
                    //mytextbox.Name = "MyText" + i;
                    //this.panel1.Controls.Add(mytextbox);                //TextBox textBox1 = new TextBox();
                   
                    //textBox1.Text = "";
                    //textBox1.Name = "mytext_xlhd_" + i.ToString();//浴帘厚度
                    //textBox1.Location = new Point(50 , 220+ i * 50);
                    //textBox1.Size = new Size(50, 16);
                                   //TextBox textBox2 = new TextBox();
                    //textBox2.Text = "";
                    //textBox2.Name = "mytext_xlgg_" + i.ToString();//浴帘规格
                    //textBox2.Location = new Point(120, 220 + i * 50);
                    //textBox2.Size = new Size(50, 16);                TextBox textBox3 = new TextBox();
                    textBox3.Text = "33";
                    textBox3.Name = "mytext_l_" + i.ToString();//长
                    textBox3.Location = new Point(50, 220 + i * 50);
                    textBox3.Size = new Size(50, 16);                TextBox textBox4 = new TextBox();
                    textBox4.Text = "21";
                    textBox4.Name = "mytext_w_" + i.ToString();//宽
                    textBox4.Location = new Point(130, 220 + i * 50);
                    textBox4.Size = new Size(50, 16);                TextBox textBox5 = new TextBox();
                    textBox5.Text = "";
                    textBox5.Name = "mytext_h_" + i.ToString();//高
                    textBox5.Location = new Point(210, 220 + i * 50);
                    textBox5.Size = new Size(50, 16);                //TextBox textBox6 = new TextBox();
                    //textBox6.Text = "";
                    //textBox6.Name = "mytext_g1_" + i.ToString();//每件净重
                    //textBox6.Location = new Point(400, 220 + i * 50);
                    //textBox6.Size = new Size(50, 16);                TextBox textBox7 = new TextBox();
                    textBox7.Text = "";
                    textBox7.Name = "mytext_g2_" + i.ToString();//每箱净重
                    textBox7.Location = new Point(290, 220 + i * 50);
                    textBox7.Size = new Size(50, 16);                TextBox textBox8 = new TextBox();
                    textBox8.Text = "";
                    textBox8.Name = "mytext_g3_" + i.ToString();//每箱毛重
                    textBox8.Location = new Point(370, 220 + i * 50);
                    textBox8.Size = new Size(50, 16);                //TextBox textBox9 = new TextBox();
                    //textBox9.Text = "";
                    //textBox9.Name = "mytext_CBM_" + i.ToString();//CBM
                    //textBox9.Location = new Point(450, 220 + i * 50);
                    //textBox9.Size = new Size(50, 16);
                                   TextBox textBox10 = new TextBox();
                    textBox10.Text = "10";
                    textBox10.Name = "mytext_cp_" + i.ToString();//每箱产品件数
                    textBox10.Location = new Point(530, 220 + i * 50);
                    textBox10.Size = new Size(50, 16);
                    TextBox textBox11 = new TextBox();
                    textBox11.Text = "";
                    textBox11.Name = "mytext_num_" + i.ToString();//订单数
                    textBox11.Location = new Point(610, 220 + i * 50);
                    textBox11.Size = new Size(50, 16);                Label label_1 = new Label();//产品序列
                    label_1.Text = Convert.ToString(i + 1);
                    label_1.Location = new Point(10, 220 + i * 50);
                    label_1.Size = new Size(50, 16);                //Controls.Add(textBox1);
                    //Controls.Add(textBox2);
                    this.panel1.Controls.Add(textBox3);
                    this.panel1.Controls.Add(textBox4);
                    this.panel1.Controls.Add(textBox5);
                    //Controls.Add(textBox6);
                    this.panel1.Controls.Add(textBox7);
                    this.panel1.Controls.Add(textBox8);
                   // Controls.Add(textBox9);                this.panel1.Controls.Add(textBox10);
                    this.panel1.Controls.Add(textBox11);
                    this.panel1.Controls.Add(label_1);
                   
                  
                               }
      

  6.   


    可以的  你用我上面我给你的代码去运行  可以添加的
    如果可以的就用我写的代码来做嘛  你写的我看了有点头晕  呵呵
    初一看倒也没什么问题  应该可以添加显示出来了  
    要不就是你Panel的大小太小了
    你画的textbox都跑Panel外面去了 所以显示不出了 其实还在的  我看你的长高设置都很大~