0

ユーザーが番号を指定すると、テキストボックスを動的に作成する必要があります。実際には、行に2つのテキストボックスがあります。ユーザーは、必要な行数を指定しません。指定されたテキストボックス(行ごとに2つ)をフォームに追加する必要があります。後で入力したテキストを読んでください....最良の方法は何ですか?

4

3 に答える 3

2

テキストボックスの数が一定であるが行の数が動的である場合は、GridViewを使用します。次に、グリッドビューをユーザーが指定した長さのリストまたは配列にバインドします。グリッドビューは指定された行をレンダリングし、ポストバックのテキストボックスから値を取得できます。

于 2010-01-28T18:01:19.253 に答える
0

aspxページにコントロールを動的に追加するには、次の手順に従います。

まず、ASPXページにプレースホルダーを追加します。

<asp:PlaceHolder runat="server" id="AssessCanvas" />

鉱山は「AssessCanvas」と呼ばれています。次に、コントロール自体を追加します。これは、Page_Loadによって呼び出されるメソッドでラベルとテキストボックスを作成するために使用するコードです。ラベルは「Weight:」のプロンプトであり、テキストボックスを使用して重量値を入力します(この例では、ボックスを作成するときに重量の値も含めます)。

Label aLbl = new Label { Text = "Weight: ", ID = ("WSLabel" + counter) };
counter++;
AssessCanvas.Controls.Add(aLbl);

TextBox aBox = new TextBox { ID = "XTest1", Columns = 5, Text = weight.ToString("##0.0"), Width = 50 };
AssessCanvas.Controls.Add(aBox);

「WSLabelN」(Nは数字)を使用して、各ラベルに一意のIDを付けます。フォームの送信時にすべてのテキストボックスをスキャンして内容を取得するため、各テキストボックスにフォーム「XTestN」のIDを指定します(Nは各フィールドの一意の識別子です。ここでは「XTest1」 「これがウェイトフィールドであることを教えてくれます)。

フォームの送信を処理する準備ができたら、次のようにします。

// Look at each key submitted with the form - *some* of these will be my input text boxes
foreach (string aStr in form.AllKeys)
{
    // Is this an input text box?  Yes if it has "XTest" in it somewhere.
    int position = aStr.IndexOf("XTest");
    if (position > 0)
    {
        // The data entry fields for each input box follows the format: <ASP.NET Prefix>XTest<TID>
        // Here I get the tid so I know what to do with the value that was entered 
        short tid = BSDIUtil.StrToIntDef(aStr.Substring(position + 5));
        switch (tid)
        {
            case 1: SaveWeight(BSDIUtil.StrToFloatDef(form.Get(aStr))); break;
            case 2: SaveJP3P1(BSDIUtil.StrToFloatDef(form.Get(aStr))); break;
            ... etc...
         }
     }
}

私のシステムでは、1つのテスト項目の値を収集するために、ページに複数のフィールドを配置する必要があることがよくあります(ここでのシステムはフィットネステストページからのものです)。たとえば、上記の「SaveJP3P1」は、実際には9つの異なるフィールドからデータを取得するため、示されているように呼び出されません。明らかな理由で、例のために簡略化しました。

このアプローチにより、柔軟性が大幅に向上します。私の全ページには、チェックボックス、ヘッダーラベル(たとえば、ラベルテキストに加えてHTML / CSS形式のラベル)、および入力用の複数のパネルを使用したフィットネステスト用のいくつかのDIVSがあります。そして、それはすべて動的に行われます。明らかに、グリッドは機能せず、他の人が示唆しているように、コントロールツリーにコントロールを追加するだけでも機能しません。

于 2010-01-28T18:22:36.260 に答える
0
Control.Controls.Add(new TextBox());

ノート:

  • 「コントロール」は明らかに、テキストボックスがケース内で配置される場所の親コントロールになります(例:コントロール)。
  • CreateChildControlsまたはPage_Initにコントロールを追加して、ページの有効期間の適切な時点で追加されるようにする必要があります。
于 2010-01-28T17:58:40.420 に答える