0

我需要在用户指定编号时动态创建文本框。实际上,一行中有两个文本框。用户指定不需要的行数。因为应将指定的文本框(每行两个)添加到表单中,我也需要阅读稍后输入的文字....最好的方法是什么?

4

3 回答 3

2

如果文本框的数量是恒定的,但行数是动态的,则使用 GridView。然后将 gridview 绑定到用户指定长度的列表或数组。然后,gridview 将呈现指定的行,您可以在回发时从文本框中获取值。

于 2010-01-28T18:01:19.253 回答
0
Control.Controls.Add(new TextBox());

笔记:

  • 在您的情况下,“控件”显然是文本框所在位置的父控件,例如控件。
  • 您需要在 CreateChildControls 或 Page_Init 上添加控件,以便将它们添加到页面生命周期的正确位置。
于 2010-01-28T17:58:40.420 回答
0

若要动态地将控件添加到 aspx 页面,请按照下列步骤操作。

首先,在 ASPX 页面上添加一个占位符:

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

我的叫做“AssessCanvas”。接下来,添加控件本身。这是我在 Page_Load 调用的方法中使用的代码,用于创建标签和文本框。标签是“重量:”的提示,文本框用于输入重量值(在示例中,我在创建框时还包括了重量值):

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

在我的系统中,我经常需要在页面上放置几个字段来收集一个测试项目的值(这里的系统来自一个健身测试页面)。例如,上面的“SaveJP3P1”没有如图所示调用,因为它实际上从九个不同的字段中提取数据。出于显而易见的原因,我为示例简化了它。

这种方法为您提供了很大的灵活性。在我的整个页面中,我有复选框、标题标签(例如,除了标签文本之外,还有一个带有 HTML/CSS 格式的标签),甚至还有几个用于健康测试的 DIVS,它们的输入有多个面板。所有这一切都是动态完成的。显然,网格不起作用,也不会像其他人建议的那样向控件树添加控件。

于 2010-01-28T18:22:36.260 回答