2013-02-27 76 views
1

球員我每次點擊一個按鈕時都會創建動態文本框。但我想,一旦我有儘可能多的文本框..我要保存這些值的數據庫表..請指導如何將它保存到數據庫保存動態創建文本框的值

public void addmoreCustom_Click(object sender, EventArgs e) 
{ 
    if (ViewState["addmoreEdu"] != null) 
    { 
     myCount = (int)ViewState["addmoreEdu"]; 
    } 
    myCount++; 
    ViewState["addmoreEdu"] = myCount; 
    //dynamicTextBoxes = new TextBox[myCount]; 

    for (int i = 0; i < myCount; i++) 
    { 
     TextBox txtboxcustom = new TextBox(); 
     Literal newlit = new Literal(); 
     newlit.Text = "<br /><br />"; 
     txtboxcustom.ID = "txtBoxcustom" + i.ToString(); 
     myPlaceHolder.Controls.Add(txtboxcustom); 
     myPlaceHolder.Controls.Add(newlit); 
     dynamicTextBoxes = new TextBox[i]; 
    } 
} 
+0

有你試一下? – Usman 2013-02-27 12:55:10

+0

還沒有。考慮少數...但不確定。 – dnts2012 2013-02-27 12:57:58

+0

從一個少數幾個,把它應用到你的代碼,然後在這裏問題..因爲那時我們有一個具體的問題來排除故障.. – Usman 2013-02-27 13:00:35

回答

1

你必須最遲於重新創建Page_Load的動態控制,否則ViewState未正確加載。但是,您可以在事件處理程序中添加新的動態控件(發生在頁面生命週期中的page_load之後)。

因此addmoreCustom_Click對於已經創建的所有控件的重新創建來說已經太遲了,但是它不是工具遲到以添加新控件或讀取Text

所以這樣的事情應該工作(未經測試):

public void Page_Load(object sender, EventArgs e) 
{ 
    if (ViewState["addmoreEdu"] != null) 
    { 
     myCount = (int)ViewState["addmoreEdu"]; 
    } 

    addControls(myCount); 
} 

public void addmoreCustom_Click(object sender, EventArgs e) 
{ 
    if (ViewState["addmoreEdu"] != null) 
    { 
     myCount = (int)ViewState["addmoreEdu"]; 
    } 
    myCount++; 
    ViewState["addmoreEdu"] = myCount; 

    addControls(1); 
} 

private void addControls(int count) 
{ 
    int txtCount = myPlaceHolder.Controls.OfType<TextBox>().Count(); 
    for (int i = 0; i < count; i++) 
    { 
     TextBox txtboxcustom = new TextBox(); 
     Literal newlit = new Literal(); 
     newlit.Text = "<br /><br />"; 
     txtboxcustom.ID = "txtBoxcustom" + txtCount.ToString(); 
     myPlaceHolder.Controls.Add(txtboxcustom); 
     myPlaceHolder.Controls.Add(newlit); 
    } 
} 

只是列舉PlaceHolder - 控制找到你TextBoxes或使用Linq:

private void saveData() 
{ 
    foreach (TextBox txt in myPlaceHolder.Controls.OfType<TextBox>()) 
    { 
     string text = txt.Text; 
     // ... 
    } 
} 
+0

文本框是基於按鈕點擊查看狀態,,所以如果按鈕被點擊5次,它會生成5個文本框,假設我有5個文本框,並且我在所有5個信息中填寫...如何讀取這5個文本框的文本,以便我可以將它發送到DB – dnts2012 2013-02-27 13:03:22

+0

@ user2104029:只需枚舉'在「PlaceHoder」中使用TextBoxes並使用Text屬性。 – 2013-02-27 13:06:08

+0

能否請你給我一個代碼演示... – dnts2012 2013-02-27 13:11:15

0

快速和骯髒的方式是隻迭代Form集合尋找合適的值:

if (Page.IsPostBack) 
{ 
    string name = "txtBoxcustom"; 
    foreach (string key in Request.Form.Keys) 
    { 
     int index = key.IndexOf(name); 
     if (index >= 0) 
     { 
      int num = Int32.Parse(key.Substring(index + name.Length)); 
      string value = Request.Form[key]; 
      //store value of txtBoxcustom with that number to database... 
     } 
    } 
} 
0

要獲取回發時動態創建的控件的值,您需要在Page_Init事件中重新創建這些控件 然後,將會加載這些控件的視圖狀態,您將獲得控件和值。

public void Page_Init(object sender, EventArgs e) 
{ 
addControls(myCount); 
} 

我希望這將解決您的問題 快樂編碼