能不能动态的生成web控件

yesman 2003-02-24 11:16:46
我现在有一个程序,当数据库中有东西的时候要出现DropDownList要是没有东西就要出现TextBox
请问有没有办法动态的生成,
我后台使用cs程序处理这个控件的内容的。
...全文
45 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yesman 2003-02-25
  • 打赏
  • 举报
回复
if i can use the keyword "static"??
  • 打赏
  • 举报
回复
收藏!
yesman 2003-02-25
  • 打赏
  • 举报
回复
i cannot understand ur mean clearly.

i change my code like this
===========================================
TextBox t1 = new TextBox();
DropDownList d1 = new DropDownList();
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!IsPostBack)
{
if (tt!=0)
if (tt == 1)
{
ttt.Controls.Add(t1);
}
else
{
ttt.Controls.Add(d1);
}

}
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

int tt = 0;
private void Button1_Click(object sender, System.EventArgs e)
{
if (TextBox1.Text=="1")
{
t1.ID = "aa";
ttt.Controls.Add(t1);
tt = 1;
}
else
{
d1.ID = "aa";
ttt.Controls.Add(d1);
tt = 2;
}
}

private void Button2_Click(object sender, System.EventArgs e)
{
if (tt == 1)
{
TextBox2.Text = t1.Text;
}

}
==================================
when i click button2
the TextBox2 still show a space
but not the value i input into t1
saucer 2003-02-25
  • 打赏
  • 举报
回复
you have to redesign your logic so that the proper control gets created again when 按别的按钮
blackant2 2003-02-25
  • 打赏
  • 举报
回复
第一步:新建textbox和viewstate用以保存textbox的值
--pageload
if(!Page.IsPostBack){ViewState["strTmp"]="Start";}
this.PH_Control.Controls.Add(new System.Web.UI.WebControls.TextBox());
((System.Web.UI.WebControls.TextBox)(this.PH_Control.Controls[0])).Text=ViewState["strTmp"].ToString();
第二步。在按钮事件中加入
ViewState["strTmp"]=((System.Web.UI.WebControls.TextBox)(this.PH_Control.Controls[0])).Text.Trim();
用以保存textbox的值

这样好象就可以达到你的要求了吧
yesman 2003-02-25
  • 打赏
  • 举报
回复
还有一个问题
就是如果我还有别的按钮,只要是一按下,页面其实就刷新一次,这样的话,刚才动态生成的东西就没有了
而且,在一个事件比如 Button_Click 里边定义的这样的控件
在别的地方是不能引用的
那我只能在外边定义,难道为了这个功能,我就必须定义一个TextBox 一个DropDownList类
然后用一个,浪费一个么?
flers 2003-02-25
  • 打赏
  • 举报
回复
dim newtxtbox as textbox
newtxtbox.text="test"
page.Controls.Add(newtxtbox)
chenbinghui 2003-02-25
  • 打赏
  • 举报
回复
你把加入控件的代码放在
if (!IsPostBack)
{
.....(这里)
}
是不对的,
应该是每一次页面回送都需要加入新的控件,而不只是第一次建立页面的时候,
还用:如果你使用的id每一次都相同,那么你新加入的控件的状态也可以保持!
yesman 2003-02-25
  • 打赏
  • 举报
回复
我是使用static用来保存的状态
chenbinghui(阿炳)你说得没错
我不应该把control.add()放在ispostback后边
我没有用这个就保留了状态,

不过我现在发现这样一次只能动态的添加n个webControl,其中n是一定的
如果我提前不知道n是多少,就不能这样做了
因为所有的WebControls的声明要在事件的外部,也就是作为整个的这个类的成员变量
而不是其中某个事件的
所以已开始定义个数是一定的
如果我想动态的添加,不定数量的怎么办呢?
saucer 2003-02-24
  • 打赏
  • 举报
回复
aspx:
<form id="form1" runat="server">
..
</form>


declare in your Page class in .cs file:
protected HtmlForm form1;
......
form1.Controls.Add(d1);

yesman 2003-02-24
  • 打赏
  • 举报
回复
bool tt = false;
private void Button1_Click(object sender, System.EventArgs e)
{
if (TextBox1.Text=="1")
{
TextBox t1 = new TextBox();
t1.ID = "ttt";
Controls.Add(t1);
tt = true;
}
else
{
DropDownList d1 = new DropDownList();
d1.ID = "ddd";
this.Controls.Add(d1);
tt = false;
}
}

这是我写的代码
但是每次我之行的时候
都给我报错
说是没有把控件放在runat=server的地方
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

类型“TextBox”的控件“ttt”必须放在具有 runat=server 的窗体标记内。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Web.HttpException: 类型“TextBox”的控件“ttt”必须放在具有 runat=server 的窗体标记内。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[HttpException (0x80004005): 类型“TextBox”的控件“ttt”必须放在具有 runat=server 的窗体标记内。]
System.Web.UI.Page.VerifyRenderingInServerForm(Control control) +152
System.Web.UI.WebControls.TextBox.AddAttributesToRender(HtmlTextWriter writer) +38
System.Web.UI.WebControls.WebControl.RenderBeginTag(HtmlTextWriter writer) +17
System.Web.UI.WebControls.TextBox.Render(HtmlTextWriter writer) +17
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +72
System.Web.UI.Control.Render(HtmlTextWriter writer) +7
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
System.Web.UI.Page.ProcessRequestMain() +1900




--------------------------------------------------------------------------------
版本信息: Microsoft .NET 框架版本:1.0.3705.0; ASP.NET 版本:1.0.3705.0

saucer 2003-02-24
  • 打赏
  • 举报
回复
<form runat="server">
....
<TR><TD><asp:PlaceHolder id="ph" runat="server" /></TD></TR>
...
</form>


use
ph.Controls.Add(YourDynamicControl);
yesman 2003-02-24
  • 打赏
  • 举报
回复
那怎么给这些东西定位呢?
比如我想
<table>
<TR><TD>aaa</TD></TR>
</table>
在aaa的地方放上这个控件,那么有没有办法把这个动态成生的东西放在这个位置呢?
saucer 2003-02-24
  • 打赏
  • 举报
回复
yes,

if (有东西)
{
DropDownList ddl = new DropDownList();
ddl.ID = "ddd";
ddl.Items.Add (new ListItem("abc","123"));
//.....
YourForm1.Controls.Add(ddl);
}
else
{
TextBox tb = new TextBox();
tb.ID="aaa";
tb.Text = "123";
YourForm1.Controls.Add(tb);
}
qiushuiwuhen 2003-02-24
  • 打赏
  • 举报
回复
TextBox tb=new TextBox();
//set tb's prop
Controls.Add(tb);

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧