2015-07-24 9 views
1

Моя цель - щелкнуть по кнопке и создать несколько текстовых полей. Типы пользователей в информации и если есть дополнительная информация (в этом случае разные дома, в которых они могут быть заинтересованы), чтобы ввести. Они продолжают нажимать кнопку добавления и появляются больше полей. Когда они будут сделаны, они нажмут вставку и все вставки данных.Вставьте несколько данных динамического текстового поля в базу данных

Сейчас у меня есть пользователь, который может щелкнуть его один раз и вставить данные, и он работает. У меня возникли проблемы с тем, что у меня есть идентификатор, в котором мне не нужно вводить «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

Просто предложение, но я бы рассмотрел эту клиентскую сторону с помощью javascript. Причина в том, что у вас возникнут проблемы с сохранением состояния. Когда вы нажимаете и добавляете текстовые поля и отправляете их, они исчезнут вместе со своими значениями. Хотя то, что вы делаете, может быть сделано, вы идете по самому сложному пути, чтобы добраться туда. –

ответ

1

Хотя я советую пытаться сделать это на стороне сервера, что вам нужно сделать, это сохранить свое состояние на постбэка означает, что вы должны будете хранить их в чем-то вроде сеанса или ViewState (BOO) восстановить их postback, а затем циклически перемещайте элементы управления формы при нажатии кнопки. Затем у вас будет доступ к параметру @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(); 
      } 
      } 
     } 
     } 
    } 
    } 
} 
Смежные вопросы