如何保留动态创建的控件的数据?

时间:2014-10-09 13:27:34

标签: c# asp.net .net web-applications

我有以下情况:

  • 我有2个启用了自动回发的下拉列表(DDL)。
  • 当用户从第一个DDL中选择某些内容时,他可以从第二个DDL中选择内容。
  • 当用户从第二个DDL中选择内容时,我打开数据库(SQL查询的WHERE子句填充了DDL中的值),并动态创建了几个放在占位符中的文本框,标签和按钮。

问题是:当我点击一些动态创建的按钮时,没有任何反应,我无法从动态创建的框中检索数据。此外,占位符内容也会丢失(所有控件)。

所以我的问题是:如何在回发时保留动态创建的控件中的数据?

我在这个网站上列出了很多类似的文章,但都没有解决我的问题。另一件事是 - 我不能使用视图状态和会话。

代码是:

public Button btn1 = new Button();
public TextBox txtBoxC1 = new TextBox();
public TextBox txtBoxC2 = new TextBox();
public TextBox txtBoxC3 = new TextBox();
...
...
...
protected void ddl2_SelectedIndexChanged(object sender, EventArgs e)
{
 ...
 ...
 if some conditions are met:
 ...
 ...
 String CS4 = ConfigurationManager.ConnectionStrings["connStringName"].ConnectionString;
 using (SqlConnection conn4 = new SqlConnection(CS4))
 {
  SqlCommand cmd4 = new SqlCommand("Select * from table where column1=" + 
  Convert.ToInt32(ddl2.SelectedValue)+" order by column1", conn4);
  conn4.Open();
  SqlDataReader rdr = cmd4.ExecuteReader();
  while (rdr.Read())
  {
    txtBoxC1.Text = rdr["column1"].ToString(); txtBoxC1.MaxLength = 3; txtBoxC1.Columns = 3; txtBoxC1.ID = ddl2.SelectedValue + "1";
    txtBoxC2.Text = rdr["column2"].ToString(); txtBoxC2.MaxLength = 3; txtBoxC2.Columns = 3; txtBoxC2.ID = ddl2.SelectedValue + "2";
    txtBoxC3.Text = rdr["column3"].ToString(); txtBoxC3.MaxLength = 3; txtBoxC3.Columns = 3; txtBoxC3.ID = ddl2.SelectedValue + "3";
    btn1.Text = "click me"; btn1.ID = ddl1.SelectedValue; btn1.Click += btn1_Click;
    phDynamic.Controls.Add(btn1);
    phDynamic.Controls.Add(txtBoxC1);
    phDynamic.Controls.Add(txtBoxC2);
    phDynamic.Controls.Add(txtBoxC3);
  }
 }
}
...
...
...
private void btn1_Click(object sender, EventArgs e)
{
  Response.Write(txtBoxC1.Text+txtBoxC2.Text+txtBoxC3.Text);
}

因此,我没有收回任何内容,而是取回了占位符控件,而不是从我的3个文本框中取回值。

0 个答案:

没有答案
相关问题