2013-02-27 79 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); 
} 

我希望这将解决您的问题 快乐编码