能不能动态的生成web控件

yesman 2003-02-24 11:16:46
我现在有一个程序,当数据库中有东西的时候要出现DropDownList要是没有东西就要出现TextBox
请问有没有办法动态的生成,
我后台使用cs程序处理这个控件的内容的。
...全文
69 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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);
Crystal Reports 9.2 中文版(水晶报表) 下载,,软件版本:9.2.0.448不过现已出了Crystal Reports Professional v9.2.2.634 (c) Crystal Decisions,有足够的空间就提供.这是一个很不错的报表控件,我相信很多朋友都听说过吧!Crystal Reports 用于处理数据库,帮助用户分析和解释重要信息。使用 Crystal Reports 可以方便地创建简单报表,同时它也提供了创建复杂或专用的报表所需的整套工具。 创建所能想象的任何报表 Crystal Reports几乎可以从任何数据源生成您需要的报表。内置报表专家在您生成报表和完成一般的报表任务过程中,会一步一步地指导您进行操作。报表专家通过公式、交叉表、子报表和设置条件格式帮助表现数据的实际意义,揭示可能被隐藏掉的重要关系。如果文字和数字确实不够充分,则用地理地图和图形进行形象的信息交流。 将报表扩展到 Web Crystal Reports 的灵活性并未停留在创建报表这一功能上 ?您可以用各种各样的格式发布报表,包括用 Microsoft 的 Word 和 Excel 发布、通过电子邮件甚至 Web 发布。高级的 Web 报表功能允许工作组中的其他成员在他们自己的 Web 浏览器中查看或更新共享报表。 将报表并入应用程序通过将 Crystal Reports 的报表处理功能整合到自己的数据库应用程序中,应用程序和 Web 开发人员可以节省开发时间并满足用户的需求。Crystal Reports 支持大多数流行的开发语言,可以方便地在任何应用程序中添加报表。 不论您是 IT 行业的站点管理员,还是营销推广经理,也无论您是金融业的数据库管理员还是 CEO,Crystal Reports 都堪称是一个功能强大的工具,它可以帮助每一个人分析、解释重要信息。感谢 revenant 上传!

62,242

社区成员

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

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

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

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