动态生成表单与调用动态生成的控件

来源:互联网 发布:杨幂人品知乎 编辑:程序博客网 时间:2024/05/17 02:29
        当态地向页面添加一个新的控件时,该控件并不会在表单回传之间自动保持下来,该控件本身并不被保存到页面的视图状态中。但是,输入到动态生成的表单域中的任何文本都将自动保存到视图状态中。当刷新页面后还是新成同一ID号的控件时,保存在视图状态的值就会自动回到相同ID号的控件中去。
        以下是页面代码:有两个Button,一个用来生成动态的TextBox,一个用来计算TextBox中的总值,一个是用来放动态控件的PlaceHolder控件。因为只是用来显示如果调用生的动态控件,所以没有注意程序的除错,以增加代码量。
<%@ Page language="c#" Codebehind="CreateNewControl.aspx.cs" AutoEventWireup="false" Inherits="TestDAAB.CreateNewControl" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    
<HEAD>
        
<title>CreateNewControl</title>
        
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        
<meta name="CODE_LANGUAGE" Content="C#">
        
<meta name="vs_defaultClientScript" content="JavaScript">
        
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    
</HEAD>
    
<body>
        
<form id="Form1" method="post" runat="server">
            
<FONT face="宋体">
                
<P>
                    
<asp:Button id="Button1" runat="server" Text="生成控件"></asp:Button>&nbsp;
                    
<asp:Button id="btnC" runat="server" Text="计算"></asp:Button></P>
                
<P>
                    
<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder></P>
            
</FONT>
        
</form>
    
</body>
</HTML>
以下是程序代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace TestDAAB
{
    
/// <summary>
    
/// CreateNewControl 的摘要说明。
    
/// </summary>

    public class CreateNewControl : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.Button Button1;
        
protected System.Web.UI.WebControls.PlaceHolder PlaceHolder1;
        
protected System.Web.UI.WebControls.Button btnC;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
//自动生成刷新页面前的动态控件
            if(!this.IsPostBack)
            
{
                ViewState.Add(
"count",0);
            }

            
else
            
{
                
for(int i = 0 ; i < Int32.Parse(ViewState["count"].ToString());i++)
                
{
                    
this.PlaceHolder1.Controls.Add(new LiteralControl("<p/> TextBox"+i+" :"));
                    TextBox tb 
=new TextBox();
                    tb.ID 
= "TextBox" + i;
                    
this.PlaceHolder1.Controls.Add(tb);
                }

            }

        }


        
Web 窗体设计器生成的代码

        
//生成动态控件的Button
        private void Button1_Click(object sender, System.EventArgs e)
        
{
            
this.PlaceHolder1.Controls.Add(new LiteralControl("<p/> TextBox"+ViewState["count"].ToString()+" :"));
            TextBox tb 
= new TextBox();
            tb.ID 
= "TextBox"+ViewState["count"].ToString();
            
this.PlaceHolder1.Controls.Add(tb);
            ViewState[
"count"= Int32.Parse(ViewState["count"].ToString()) + 1;
        }

        
//计算Button
        private void Button2_Click(object sender, System.EventArgs e)
        
{    
            
int Max =0;
            
for(int i=0;i<Int32.Parse(ViewState["count"].ToString());i++)
            
{
                Max 
+=Int32.Parse((this.FindControl("Textbox"+i) as TextBox).Text);
            }

            Response.Write(
"总数等于:"+Max);
        }


    }

}