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

有帮助吗?

解决方案

如果文本框的数目是恒定的,而是行数是动态的,则使用GridView。然后结合在GridView到列表或用户指定的长度的阵列。然后,GridView控件将呈现指定的行,你可以得到回发从文本框的值。

其他提示

Control.Controls.Add(new TextBox());

笔记:

  • 在您的情况下,“Control”显然是文本框所在位置的父控件,例如一个控件。
  • 您需要在createChildControls或page_init上添加控件,以便在页面寿命的正确点添加它们。

要控制动态地添加到aspx页,执行以下步骤。

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

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

矿被称为 “AssessCanvas”。接下来,添加控件本身。下面是代码,我在用的Page_Load调用来创建一个标签和一个文本框的方法使用。标记物是提示“体重:”和文本框用来输入一个权重值(在本例中,我还包括当创建的框重量的值AM):

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”(其中N是每个字段的唯一标识符的ID - 这里的“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”上方没有如图因为它实际上从拉的 9 不同字段的数据调用。我简化它的原因很明显的例子。

此方法给您的伟大的灵活处理。在我的整个页面,我的复选框,标题标签(例如带有HTML / CSS除了标签文本格式标签),甚至几个DIVS与他们输入多个面板的体能测试。而所有的它是动态的。显然,网格是行不通也不只想增加一个控制来控制树的其他建议。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top