C# 如何为动态创建的控件保留数据?
我有以下情况:C# 如何为动态创建的控件保留数据?,c#,asp.net,.net,web-applications,C#,Asp.net,.net,Web Applications,我有以下情况: 我有两个下拉列表(DDL)启用了自动回发功能 当用户从第一个DDL中选择内容时,他可以从第二个DDL中选择内容 当用户从第二个DDL中选择某个内容时,我打开数据库(SQL查询的WHERE子句由DDL中的值填充),并动态创建几个文本框、标签和按钮,并将它们放置在占位符中 问题是:当我单击一些动态创建的按钮时,什么也没有发生,并且我无法从动态创建的框中检索数据。此外,占位符内容丢失(所有控件) 所以我的问题是:如何在回发时保留动态创建的控件中的数据 我在这个网站上列出了很多类似的
- 我有两个下拉列表(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个文本框中返回值,而是什么也没有返回,而且我还丢失了占位符控件。Create
DataTable
动态添加一行。。。在会话中保存DataTable
并继续…..为什么不能使用视图状态或会话?因为它在我的环境中被禁用。所以没有会话和视图状态。然后我认为您必须将状态存储在SQL Server数据库中的临时表中。这听起来怎么样?也许你应该重新评估你的设计。当用户做一些简单的事情,比如更改dropdownlist中的值时,您真的希望整个表单都发布到服务器,并且服务器必须重新生成响应吗?那是一大笔开销。这对资源和用户都是不利的。相反,为什么不在客户端使用一些来向服务器发出请求呢?开销小得多,更容易创建积极的用户体验。