动态添加子控件(三):获得子控件的值
还是在刚才的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 "-//W
<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="宋体"> </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>";
}
}
}
}