C# 将多个动态文本框数据插入数据库

C# 将多个动态文本框数据插入数据库,c#,sql,C#,Sql,我的目标是。。。点击一个按钮,它会创建一些文本框。用户输入信息,如果有更多的信息(在本例中是他们可能感兴趣的不同房屋)可以输入。他们不断点击添加按钮,更多的框出现。完成后,单击“插入”并插入所有数据 现在,我所拥有的是一个用户可以点击它一次,插入数据,它的工作。我遇到的问题是,有一种方法可以让ID计数,而不必输入“txtDynamic1”、“txtdyanamic2”等 此外,参数@name只能使用一次。因此,我不明白是否唯一的方法是单击“插入”,然后从文本框中删除数据,然后他们可以重新键入更多

我的目标是。。。点击一个按钮,它会创建一些文本框。用户输入信息,如果有更多的信息(在本例中是他们可能感兴趣的不同房屋)可以输入。他们不断点击添加按钮,更多的框出现。完成后,单击“插入”并插入所有数据

现在,我所拥有的是一个用户可以点击它一次,插入数据,它的工作。我遇到的问题是,有一种方法可以让ID计数,而不必输入“txtDynamic1”、“txtdyanamic2”等

此外,参数@name只能使用一次。因此,我不明白是否唯一的方法是单击“插入”,然后从文本框中删除数据,然后他们可以重新键入更多内容

我不确定我的设想是否可行,他们可以点击多个文本框,然后点击一个按钮全部插入。我有这个设置的gridview,但它一次只做一个。。。任何帮助都将不胜感激,因为我花了太多时间在这件事上

对不起,如果这没有解释清楚,因为我的大脑在这一点上是油炸

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实现客户端。原因是你将很难保持状态。当您单击并添加文本框并提交时,这些文本框将与其值一起消失。虽然你正在做的事情是可以做到的,但你正在走最艰难的道路。