一下是我写的代码:
protected string t()
{
IList<Biaodan> list = BiaodanManager.GetAll();
StringBuilder strlist = new StringBuilder();
strlist.Append("<table><tr><td>姓名:<input ID=\"TextBox1\" runat=\"server\"></asp:TextBox></td></tr><tr><td>姓名:<input ID=\"TextBox1\" runat=\"server\"></asp:TextBox></td></tr>");
foreach (Biaodan b in list)
{
if (b.FTypeName == "文本录入")
{
//DropDownList d = new DropDownList();
//ListItem item = new ListItem();
//item.Text = "a";
//item.Value = "a";
//d.Items.Add(item);
TextBox t = new TextBox();
t.ID = b.JId.ToString();
//Page.FindControl("asda").Controls.Add(t);
strlist.AppendLine("<tr>单位:<span ID=\"s" + b.JId + "\" ></span> </td></tr>");
string f = "s" + b.JId.ToString();
Page.FindControl("form1").FindControl(f).Controls.Add(t);
}
}
strlist.Append("</table>");
return strlist.ToString();
}
为什么不用Repeater,模板项里可以直接写控件呀..不用这样拼接。
在ItemCreated 事件里面写:
protected void Repeater1_ItemCreated(object sender, RepeaterItemEventArgs e)
{
e.Item.Controls.Add(new Control());
}
可以通过添加样式表来完成定位
不是很明白你的问题,不过看看这个也许有一点帮助。http://www.cnblogs.com/xingshao/archive/2010/08/06/1793827.html
楼主是要实现控件定位呢?还是实现动态添加控件呢?明确一下,可以重点解决。
定位:按照你的思路拼接页面html代码也可以,但是要拼接的很好。控制位置可以用CSS样式来实现。或者指定height、width。
动态生成的控件:绑定一个repeater或者datalist 然后对Items进行绑定。具体项的类型〔你提到是“文本框”的话〕判断数据中字段标示“文本框”类型。然后动态添加一个对应的文本框。〔实现:后台.cs代码实现即可).或者编写一个基类的控件。然后在控件中定义不同的类型。根据绑定的数据来初始化不同的表现〔文本框、多选。单选等。〕