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

时间:2015-07-24 17:16:23

标签: c# sql

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

现在我所拥有的是用户可以单击一次并插入数据并且可以正常工作。我遇到麻烦的是有办法保持ID的计数方式,我不必输入“txtDynamic1”,“txtDyamic2”等。

此外,参数@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();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

虽然我建议不要尝试在服务器端执行此操作,但您需要做的是将其状态保持在回发意味着您必须将它们存储在诸如session或viewstate(boo)之类的内容中,在回发时恢复它们然后循环单击按钮上的表单控件。然后,您将在循环中逐行访问@name参数(仅需要一次)。以下是这个想法,但我多年来都没有使用过网络表单,因此您需要检查语法。

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();
            }
          }
        }
      }
     }
   }
}