高手请进,如何动态添加新的控件!(100分求解)立即结贴
做综合查询,如何通过一个按钮产生新的控件,这个控件的产生完全通过代码生成,从而实现通过这个按钮产生数量不定的控件(如下拉框)
谢谢
问题点数:100、回复次数:9Top
1 楼cnhgj(戏子) (没时间练太极)回复于 2004-12-01 21:26:22 得分 35
<script language=C# runat=server>
int Count
{
get
{
object o = ViewState["Count"];
if (o==null)
return 0;
return (int)ViewState["Count"];
}
set
{
ViewState["Count"] = value;
}
}
DropDownList AddDDL()
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();
DropDownList ddl = new DropDownList();
tc.Controls.Add(ddl);
tr.Cells.Add(tc);
tbl.Rows.Add(tr);
return ddl;
}
void PopulateDLL(DropDownList ddl)
{
for (int i=1; i <=10; i++)
ddl.Items.Add(i.ToString());
}
void Page_Load(Object sender, EventArgs e)
{
for (int i=0; i < Count; i++)
{
AddDDL();
}
}
void Add(Object sender, EventArgs e)
{
DropDownList ddl= AddDDL();
PopulateDLL(ddl);
Count++;
}
</script>
<form runat=server id=form1>
<asp:Table id=tbl runat=server />
<asp:Button id=btn runat=server text=add Onclick="Add" />
<asp:Button id=btn2 runat=server text=submit/>
</form>
Top
2 楼bitm(爱思派)回复于 2004-12-01 21:29:44 得分 0
TableCell tc = new TableCell();
DropDownList ddl = new DropDownList();
tc.Controls.Add(ddl);Top
3 楼ifwhat()回复于 2004-12-01 21:40:01 得分 0
在页面上拖一个PlaceHolder
代码如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ddl As New Web.UI.WebControls.DropDownList
Me.PlaceHolder1.Controls.Add(ddl)
End SubTop
4 楼ifwhat()回复于 2004-12-01 21:43:10 得分 0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ddl As New Web.UI.WebControls.DropDownList
Dim newlistitem As New WebControls.ListItem
newlistitem.Text = "aa"
newlistitem.Value = "aa"
ddl.Items.Add(newlistitem)
Me.PlaceHolder1.Controls.Add(ddl)
End SubTop
5 楼camark(5天生活)回复于 2004-12-01 21:44:13 得分 0
Sub Page_Load()
Dim i as Integer
For i=0 to 4
Dim myUserControl as Control
myUserControl = Page.LoadControl(“foo.ascx”)
PlaceHolder1.Controls.Add(myUserControl)
PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
Next i
End SubTop
6 楼libra47(可爱的狗狗)回复于 2004-12-01 22:29:13 得分 0
100分,好了立即给分Top
7 楼lhcoolhacker(hugh-lin)回复于 2004-12-02 09:49:06 得分 0
使用PlaceHolder控件,然后在后台将控件添加到PlaceHolder即可Top
8 楼lr2651(戎 The Two Towers)回复于 2004-12-02 10:11:27 得分 35
private void loadmyComponents()
{
if(this.Request.Params["leftPane"] != null)
{
System.Web.UI.UserControl myLeftPane = (System.Web.UI.UserControl)Page.LoadControl(this.Request.Params["leftPane"].ToString());
myLeftPane.ID = "myLeftPane";
this.leftPane.Controls.Add(myLeftPane);
this.leftPane.Visible=true;
}
if(this.Request.Params["contentPane"] != null)
{
this.contentPane.Controls.Add((System.Web.UI.UserControl)Page.LoadControl(this.Request.Params["contentPane"].ToString()));
this.contentPane.Visible = true;
}
if(this.Request.Params["rightPane"] != null)
{
this.rightPane.Controls.Add((System.Web.UI.UserControl)Page.LoadControl(this.Request.Params["rightPane"].ToString()));
this.rightPane.Visible = true;
}
if(this.Request.Params["contentPane"] == null)
{
this.leftPane.Controls.Add((System.Web.UI.UserControl)Page.LoadControl("~/components/left1.ascx"));
this.leftPane.Visible = true;
this.contentPane.Controls.Add((System.Web.UI.UserControl)Page.LoadControl("~/components/center1.ascx"));
this.contentPane.Visible = true;
}
}
然后把this.loadmyComponents();加入
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
this.loadmyComponents();
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
里面可以实现页面初试化的动态绑定用户控件Top
9 楼tingpig(汀)回复于 2004-12-09 20:24:47 得分 30
主要用control.add方法。
可以在循环中写:
TableCell tc = new TableCell();
DropDownList ddl = new DropDownList();
tc.Controls.Add(ddl);
Top




