动态添加子控件(三):获得子控件的值

上章里可以看到如何动态添加子控件,但是添加子控件的目的,还是为了获得从客户端传回来的子控件的值,本章将说明如何来获取这些值。

    还是在刚才的ControlsAdd.aspx页面,再添加一个Button2按钮和一个Label1控件,Label1是用来输出子控件的值的。

    双击Button2按钮,在Button2_Click事件里加入以下代码:

for (int i=0;i<this.DataList1.Items.Count;i++)
{
 TextBox tb = (TextBox)this.DataList1.Items[i].Controls[0];
 this.Label1.Text += tb.Text+"<br>";
}

    编译生成后,看看效果。如果添加的子控件不是TextBox类型的,也可以根据实际情况修改代码。完整的代码如下:

ControlsAdd.aspx:

<%@ Page language="c#" Codebehind="ControlsAdd.aspx.cs" AutoEventWireup="false" Inherits="test.ControlsAdd" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>

     <HEAD>

         <title>ControlsAdd</title>

         <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">

         <meta content="C#" name="CODE_LANGUAGE">

         <meta content="JavaScript" name="vs_defaultClientScript">

         <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">

     </HEAD>

     <body>

         <form id="Form1" method="post" runat="server">

              <FONT face="宋体">

                   <asp:DataList id="DataList1" runat="server"></asp:DataList>

                   <P>

              </FONT>

              <asp:Button id="Button1" runat="server" Text="添加"></asp:Button><FONT face="宋体">&nbsp;</FONT>

              <asp:Button id="Button2" runat="server" Text="提交"></asp:Button></P>

              <P><FONT face="宋体">

                       <asp:Label id="Label1" runat="server"></asp:Label></FONT></P>

         </form>

     </body>

</HTML>

ControlsAdd.aspx.cs:

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 test

{

     /// <summary>

     /// ControlsAdd 的摘要说明。

     /// </summary>

     public class ControlsAdd : System.Web.UI.Page

     {

         protected System.Web.UI.WebControls.DataList DataList1;

         protected System.Web.UI.WebControls.Button Button2;

         protected System.Web.UI.WebControls.Label Label1;

         protected System.Web.UI.WebControls.Button Button1;

    

         private void Page_Load(object sender, System.EventArgs e)

         {

              if (!this.IsPostBack)

              {

                   DataTable dt = new DataTable();

                   dt.Columns.Add("abb");

                   DataRow row = dt.NewRow();

                   ViewState["dt"] = dt;              }

         } 

         #region Web 窗体设计器生成的代码

         override protected void OnInit(EventArgs e)

         {

              //

              // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。

              //

              InitializeComponent();

              base.OnInit(e);

         }        

         /// <summary>

         /// 设计器支持所需的方法 - 不要使用代码编辑器修改

         /// 此方法的内容。

         /// </summary>

         private void InitializeComponent()

         {   

              this.DataList1.ItemCreated += new System.Web.UI.WebControls.DataListItemEventHandler(this.DataList1_ItemCreated);

              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

 

         private void Button1_Click(object sender, System.EventArgs e)

         {

              DataTable dt = (DataTable)ViewState["dt"];

              DataRow row = dt.NewRow();

              dt.Rows.Add(row);

              ViewState["dt"] = dt;

              this.DataList1.DataSource = dt;

              this.DataList1.DataBind();

         }

 

         private void DataList1_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)

         {

              if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)

              {

                   TextBox tb = new TextBox();

                   e.Item.Controls.Add(tb);

              }

         } 

         private void Button2_Click(object sender, System.EventArgs e)

         {

              for (int i=0;i<this.DataList1.Items.Count;i++)

              {

                   TextBox tb = (TextBox)this.DataList1.Items[i].Controls[0];

                   this.Label1.Text += tb.Text+"<br>";

              }

         }

     }

}

posted @ 2011-04-20 14:18  金威  阅读(341)  评论(0编辑  收藏  举报