C# 将多个动态文本框数据插入数据库
我的目标是。。。点击一个按钮,它会创建一些文本框。用户输入信息,如果有更多的信息(在本例中是他们可能感兴趣的不同房屋)可以输入。他们不断点击添加按钮,更多的框出现。完成后,单击“插入”并插入所有数据 现在,我所拥有的是一个用户可以点击它一次,插入数据,它的工作。我遇到的问题是,有一种方法可以让ID计数,而不必输入“txtDynamic1”、“txtdyanamic2”等 此外,参数@name只能使用一次。因此,我不明白是否唯一的方法是单击“插入”,然后从文本框中删除数据,然后他们可以重新键入更多内容 我不确定我的设想是否可行,他们可以点击多个文本框,然后点击一个按钮全部插入。我有这个设置的gridview,但它一次只做一个。。。任何帮助都将不胜感激,因为我花了太多时间在这件事上 对不起,如果这没有解释清楚,因为我的大脑在这一点上是油炸C# 将多个动态文本框数据插入数据库,c#,sql,C#,Sql,我的目标是。。。点击一个按钮,它会创建一些文本框。用户输入信息,如果有更多的信息(在本例中是他们可能感兴趣的不同房屋)可以输入。他们不断点击添加按钮,更多的框出现。完成后,单击“插入”并插入所有数据 现在,我所拥有的是一个用户可以点击它一次,插入数据,它的工作。我遇到的问题是,有一种方法可以让ID计数,而不必输入“txtDynamic1”、“txtdyanamic2”等 此外,参数@name只能使用一次。因此,我不明白是否唯一的方法是单击“插入”,然后从文本框中删除数据,然后他们可以重新键入更多
public partial class Sold : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<string> keys = Request.Form.AllKeys.Where(key => key.Contains("txtDynamic")).ToList();
int i = 1;
foreach (string key in keys)
{
this.CreateTextBox("txtDynamic" + i);
i++;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
int j = 1;
for (j = 1; j < 3; j++)
{
int index = pnl.Controls.OfType<TextBox>().ToList().Count + 1;
this.CreateTextBox("txtDynamic" + index);
}
}
private void CreateTextBox(string id)
{
TextBox txt = new TextBox();
txt.ID = id;
pnl.Controls.Add(txt);
// Literal lt = new Literal();
// lt.Text = "<br />";
// pnl.Controls.Add(lt);
}
protected void Button2_Click(object sender, EventArgs e)
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("INSERT INTO TI_Homes(CustomerID, Year, Make, Size, Owed, Offer, Wholesale) VALUES('1000', @name, @year, '80ft', '100,000', '80,000', 'Wholesale?')"))
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@name", (pnl.FindControl("txtDynamic1") as TextBox).Text);
cmd.Parameters.AddWithValue("@year", (pnl.FindControl("txtDynamic2") as TextBox).Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
}
出售的公共部分类:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
List keys=Request.Form.AllKeys.Where(key=>key.Contains(“txtDynamic”)).ToList();
int i=1;
foreach(字符串键入键)
{
这个.CreateTextBox(“txtDynamic”+i);
i++;
}
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
int j=1;
对于(j=1;j<3;j++)
{
int index=pnl.Controls.OfType().ToList().Count+1;
这个.CreateTextBox(“txtDynamic”+索引);
}
}
私有void CreateTextBox(字符串id)
{
TextBox txt=新的TextBox();
txt.ID=ID;
pnl.Controls.Add(txt);
//文字lt=新文字();
//lt.Text=“”; //pnl.Controls.Add(lt); } 受保护的无效按钮2\u单击(对象发送者,事件参数e) { string constr=ConfigurationManager.ConnectionString[“constr”].ConnectionString; 使用(SqlConnection con=newsqlconnection(cont)) { 使用(SqlCommand cmd=new SqlCommand(“插入到TI_房屋(客户ID、年份、品牌、大小、欠款、报价、批发)值('1000'、@name、@Year、'80ft'、'100000'、'80000'、'批发?')) { cmd.Connection=con; cmd.Parameters.AddWithValue(“@name”,(pnl.FindControl(“txtDynamic1”)作为TextBox.Text); cmd.Parameters.AddWithValue(“@year”,pnl.FindControl(“txtDynamic2”)作为TextBox.Text); con.Open(); cmd.ExecuteNonQuery(); con.Close(); } } } }
尽管我建议不要尝试在服务器端执行此操作,但您需要做的是在回发时保持其状态,这意味着您必须将其存储在会话或视图状态(boo)中,在回发时恢复它们,然后在您的按钮单击中循环表单控件。然后您将可以在循环中逐行访问@name参数(只需要一次)。下面是我的想法,但我已经多年没有使用web表单了,所以您需要检查语法
protected void Button2_Click(object sender, EventArgs e)
{
foreach(var control in Page.Controls)
{
if(control is TextBox)
{
if(((TextBox)control).ID.IndexOf("txtDynamic") != -1)
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("INSERT INTO TI_Homes(CustomerID, Year, Make, Size, Owed, Offer, Wholesale) VALUES('1000', @name, @year, '80ft', '100,000', '80,000', 'Wholesale?')"))
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@name", ((TextBox)control).Text);
cmd.Parameters.AddWithValue("@year", (pnl.FindControl("txtDynamic2") as TextBox).Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
}
}
}
}
这只是一个建议,但我会研究如何使用javascript实现客户端。原因是你将很难保持状态。当您单击并添加文本框并提交时,这些文本框将与其值一起消失。虽然你正在做的事情是可以做到的,但你正在走最艰难的道路。