2013-03-07 115 views
-4

我想生成动态文本框和标签,因为我在C#中的datagridview中添加了列。 我也希望稍后编写一个SQL查询,它将我新生成的textBoxes作为参数/新列名称。发生的错误说'参数超出范围异常未处理'。生成动态文本框和标签

请帮

public void CreateLabels() 
    { 
     Label lb = new Label(); 
     this.Controls.Add(lb); 
     int p= dataGridView1.ColumnCount; 
     for (int k = p; k <= dataGridView1.ColumnCount; k++) 
     { 
      for (int z =p; z <= dataGridView1.ColumnCount; z++) 
      { 
       dataGridView1.Refresh(); 
       lb.Text = dataGridView1.Columns[z++].HeaderText; 
      } 
      lb.Show(); 
      lb.Visible = true; 
     } 
     lb.Location = new Point(m,n=n+25); 
     lb.Width = 199; 
     lb.Height = 20; 
    } 
    public void CreateTextBoxes() 
    { 
     TextBox tb = new TextBox(); 
     this.Controls.Add(tb); 
     for (int i = 5; i <= dataGridView1.ColumnCount; i++) 
     { 
      dataGridView1.Refresh(); 
      tb.Name = "textBox" + i; 
      MessageBox.Show(tb.Name); 
     } 
     tb.Location = new Point(x, y = y + 25); 
     tb.Show(); 
     tb.Visible = true;   
    }*/ 

    //Below method is used to get data in datagridview1 and to reflect in runtime text boxes and labels;the visible property is kept false 

    /*private void displayRec() 
    { 
     try 
     { 
      string str = System.Environment.MachineName; 
      SqlConnection sconn = new SqlConnection("Data Source='" + str + "';Initial Catalog=main;Integrated Security=True"); 
      DataTable dt = new DataTable(); 
      SqlDataAdapter da = new SqlDataAdapter("Select * from invent", sconn); 
      da.Fill(dt); 

      dataGridView1.DataSource = dt.DefaultView; 
      //dataGridView1.Refresh(); 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.ToString()); 
     } 
    } 
+2

也许你可以告诉我们一些代码..? – 2013-03-07 11:39:42

回答

0

说实话,我不明白你的循环的想法。他们有相同的条件,你从来没有使用'K';
但是,两个循环都从最后一列+1开始;并在lb.Text的赋值中尝试获取不存在的列的HeaderText。这就是为什么你有超出范围的例外。

+0

Thnx对于帮助 – user2038924 2013-03-07 12:16:30

+0

@ user2038924表示欢迎,我认为你最好修改你的代码,在你的循环内部,你将结果赋给你在函数开头创建的相同标签的text属性,然后,重新展示并使其一次又一次可见... – Jyrkka 2013-03-07 12:29:16