1

数値を追加する TextBox があり、ボタンをクリックすると、最初の TextBox に入力した数値に応じて新しいテキスト ボックスが作成されます。

たとえば、TextBox に 5 を入力してボタンを押すと、ページに 5 つの新しいテキスト ボックスが表示されます。

今、作成されたこのすべてのテキストボックスで RequiredFieldValidator を作成しようとしていますが、機能させることができません。データベースに挿入する別のボタンがあり、すべての新しいテキストボックスからのこの値が必要です。

誰かが私のコードを見て、正しい軌道に乗っているかどうかを確認し、コードを修正して機能するようにすることができますか?

protected void btnGenerateControl_Click(object sender, EventArgs e)
    {
        int Count = Convert.ToInt32(Qty.Text);
        for (int i = 1; i <= Count; i++)
        {
            Label lbl = new Label();
            TextBox txtbox = new TextBox();
            RequiredFieldValidator rfv = new RequiredFieldValidator();
            string ValidationGroup = "Group2";
            string ErrorMessage = "Bitte Flotten ID eingeben";

            lbl.Text = " Flotten ID " + (i).ToString() + " ";
            txtbox.EnableViewState = true;
            rfv.ControlToValidate = txtbox.Text;

            rfv.ErrorMessage = ErrorMessage;
            rfv.ValidationGroup = ValidationGroup;
            rfv.ForeColor = System.Drawing.Color.Red;
            Label lbl1 = new Label();
            TextBox txtbox1 = new TextBox();

            txtbox1.EnableViewState = true;
            pnlTextBoxes.Controls.Add(lbl);
            pnlTextBoxes.Controls.Add(new LiteralControl("<input id='txt' name='FlottenID" + i + "'type='text'  />"));
            pnlTextBoxes.Controls.Add(lbl1);
            lbl1.Text = "  Bemerkungen: ";
            pnlTextBoxes.Controls.Add(new LiteralControl("<input id='txt' name='Info" + i + "'type='text'  />"));
            pnlTextBoxes.Controls.Add(new LiteralControl("<br /><br />"));
        }
    }

ご協力いただきありがとうございます。RequiredFieldValidator は動作するようになりましたが、データベースに挿入すると、txtbox と txtbox1 の値が空になります。私は今、インサートに何か問題があります。

私は今そこで何を変えなければなりませんか?

protected void btnGenerateControl_Click(object sender, EventArgs e)
    {
        int Count = Convert.ToInt32(Qty.Text);
        for (int i = 1; i <= Count; i++)
        {

            string ValidationGroup = "Group2";
            string ErrorMessage = "Bitte Flotten ID eingeben";

            Label lbl = new Label();
            lbl.Text = " Flotten ID " + (i).ToString() + " ";

            TextBox txtbox = new TextBox();
            txtbox.EnableViewState = true;
            txtbox.ID = "txt" + i;

            TextBox txtbox1 = new TextBox();
            txtbox.EnableViewState = true;
            txtbox.ID = "txt" + i;


            RequiredFieldValidator rfv = new RequiredFieldValidator();
            rfv.ControlToValidate = txtbox.ID;
            rfv.ErrorMessage = ErrorMessage;
            rfv.ID = "rfv" + i;
            rfv.ValidationGroup = ValidationGroup;
            rfv.ForeColor = System.Drawing.Color.Red;

            Label lbl1 = new Label();
            lbl1.Text = "  Bemerkungen: ";




            pnlTextBoxes.Controls.Add(lbl);
            //pnlTextBoxes.Controls.Add(new LiteralControl("<input id='txt' name='FlottenID" + i + "'type='text'  />"));
            pnlTextBoxes.Controls.Add(txtbox);
            pnlTextBoxes.Controls.Add(rfv);
            pnlTextBoxes.Controls.Add(lbl1);
            pnlTextBoxes.Controls.Add(txtbox1);

            //pnlTextBoxes.Controls.Add(new LiteralControl("<input id='txt' name='Info" + i + "'type='text'  />"));
            pnlTextBoxes.Controls.Add(new LiteralControl("<br /><br />"));
        }
    }

    protected void btnAddOrder_Click(object sender, EventArgs e)
    {
        int Count = Convert.ToInt32(Qty.Text);
        for (int i = 1; i <= Count; i++)
        {

            String query = "insert into Orders (CustID, OrderDate, Time, ProductID, ProjectID, Status, FlottenID, Info)values('" + CustID.Text + "','" + OrderDate.Text + "','" + Time.Text + "','" + ProductID.Value + "','" + ProjectID.Value + "','" + Status.Value + "','" + Request.Form["FlottenID" + i.ToString()] + "','" + Request.Form["Info" + i.ToString()] + "')";
            String query1 = "commit;";
            DataLayer.DataConnector dat = new DataLayer.DataConnector("Provider=SQLOLEDB; data source=rzwsrv010;database=event;user ID=event;password=event; Persist Security Info=False");
            dat.DataInsert(query);
            dat.DataInsert(query1);
        }

        Response.Redirect("NewOrder.aspx");
    }
4

2 に答える 2

4

IDTextBox を動的に作成するときは、各 textBox にを割り当てる必要があります。

TextBox txtbox = new TextBox();
txtbox.ID="txt"+i; // This ID can be assigned values as per your own Logic.

RequiredFieldValidator を使用して同じことを行う必要があります。

RequiredFieldValidator rfv = new RequiredFieldValidator();
 rfv.ID = "rfv" + i; // again assign ID values as per your own logic

これを行ったら、IDTextBoxを のControlToValidateプロパティに割り当てる必要がありますRequiredFieldValidator.。このControlToValidateプロパティは、ID現在あなたが行っている Text プロパティのようなものではなく、コントロールを検証するために実際に取得します。

rfv.ControlToValidate = txtbox.ID;

上記で生成された 2 つのコントロールを、所有している PlaceHolders に追加します。あなたが現在示しているコードは、これらのコントロールをどこにも追加していないようです。

最後に、このテキストボックス内に値を挿入しようとしている場合は、そのような動的に作成されたすべてのテキストボックスの ViewState も維持する必要がある可能性があります。考えられる解決策の 1 つは、ページの読み込み時にそのようなテキスト ボックスをすべて再生成することです。これには、コードの編成について再考する必要があります。ポストバック後にこれらのテキスト ボックスがその状態を維持することを確認する場合は、ここで続行します

于 2013-08-16T14:27:23.857 に答える
4

ページに RequiredFieldValidator コントロールを追加する必要があります。つまり、これをどこかに追加する必要があります:

pnlTextBoxes.Controls.Add(rfv) 
于 2013-08-16T15:26:54.893 に答える