保存动态创建文本框的值

本文关键字:文本 动态 创建 保存 | 更新日期: 2023-09-27 18:01:27

伙计们,我正在创建动态文本框每次按钮被点击。但是一旦我有了任意多的文本框…我想保存这些值数据库表..请指导如何保存到DB

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];
    }
}

保存动态创建文本框的值

您必须最迟在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 -Controls来查找TextBoxes或使用Linq:

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

快速和肮脏的方法将只是迭代表单集合寻找适当的值:

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...
        }
    }
}

要获取回发时动态创建的控件的值,您需要在Page_Init事件上重新创建这些控件然后这些控件的viewstate会被加载你会得到控件和它们的值

public void Page_Init(object sender, EventArgs e)
{
addControls(myCount);
}
我希望这将解决你的问题快乐编码