添加子控件(四):进一步完善

经过上三章,现在应该知道怎么样添加子控件,怎么样获取子控件的值了,但是在运行上章的程序的时候,可能会发现这样的问题。如果添加了一个文本框,再在文本框里输入一些文字,然后又添加一个文本框的话,那么原来输入的文字就会消失。这对于实际操作而言,是很不方便的,那么,我们就要对原代码进行一点点修改了。

    先把ControlsAdd.aspx.cs文件里的Button1_Click事件代码改为:

DataTable dt = (DataTable)ViewState["dt"];
for (int i=0;i<this.DataList1.Items.Count;i++)
{
 TextBox tb = (TextBox)this.DataList1.Items[i].Controls[0];
 dt.Rows[i][0] = tb.Text;
}
DataRow row = dt.NewRow();
row[0] = "";
dt.Rows.Add(row);
ViewState["dt"] = dt;
this.DataList1.DataSource = dt;
this.DataList1.DataBind();

    再把DataList1_ItemCreated事件代码改为:

DataRowView drv = (DataRowView)(e.Item.DataItem);
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
 TextBox tb = new TextBox();
 if (drv!=null)
 {
  tb.Text = drv[0].ToString();
 }
 e.Item.Controls.Add(tb);
}

    编译后试试效果吧。完整的代码如下:

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"];

 

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

              {

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

                   dt.Rows[i][0] = tb.Text;

              }

             

              DataRow row = dt.NewRow();

              row[0] = "";

              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)

         {

              DataRowView drv = (DataRowView)(e.Item.DataItem);

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

              {

                   TextBox tb = new TextBox();

                   if (drv!=null)

                   {

                       tb.Text = drv[0].ToString();

                   }

                   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:21  金威  阅读(168)  评论(0编辑  收藏  举报