1

みんな、ボタンがクリックされるたびに動的な TextBoxes を作成しています。しかし、テキストボックスが必要な数だけある場合..これらの値をデータベーステーブルに保存したい..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];
    }
}
4

3 に答える 3

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

-Controlsを列挙して、 LinqPlaceHolderを検索TextBoxesまたは使用します。

private void saveData()
{
    foreach (TextBox txt in myPlaceHolder.Controls.OfType<TextBox>())
    {
        string text = txt.Text;
        // ...
    }
}
于 2013-02-27T12:57:18.650 に答える
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...
        }
    }
}
于 2013-02-27T13:14:18.217 に答える
0

ポストバックで動的に作成されたコントロールの値を取得するには、Page_Init イベントでこれらのコントロールを再作成する必要があります。その後、これらのコントロールのビュー ステートが読み込まれ、コントロールとそこの値が取得されます。

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

これで問題が解決することを願っています ハッピーコーディング

于 2013-11-17T06:02:51.723 に答える