我需要动态创建文本框,因为用户指定了no ..实际上一行中有两个文本框..user指定不需要行...因为指定的文本框(每行两个)应该添加到表单中我需要阅读稍后输入的文字....什么是最好的方法?
答案 0 :(得分:2)
如果文本框的数量是常量但行数是动态的,则使用GridView。然后将gridview绑定到用户指定的长度的列表或数组。然后gridview将呈现指定的行,您可以在回发时从文本框中获取值。
答案 1 :(得分:0)
Control.Controls.Add(new TextBox());
注意:
答案 2 :(得分: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,其中有多个面板用于输入。并且所有都是动态完成的。显然,网格不起作用,也不会像其他人所建议的那样只向控制树添加控件。