62,266
社区成员
发帖
与我相关
我的任务
分享
//用户控件代码,添加一个TextBox控件在已定义的Table1里面
public partial class uc_uctest : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TableCell tc = new TableCell();
TextBox tb = new TextBox();
tb.EnableViewState = true;
tb.ID = "tb1";
tb.EnableViewState = true;
tb.Text = "dwodfls“;”";
tc.Controls.Add(tb);
TableRow tr = new TableRow();
tr.Cells.Add(tc);
this.Table1.Rows.Add(tr);
}
}
}
//在调用的页面的单击事件里面无法找到用户控件动态添加的TextBox控件
protected void Button1_Click(object sender, EventArgs e)
{
TextBox tb = this.Uctest1.FindControl("tb1") as TextBox;
tb.Text = "重新赋值";//这句话会引发异常,未定义的变量
}
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="UserControl.Controls.WebUserControl1" %>
<asp:Table id="Table1" runat="server"></asp:Table>
public partial class WebUserControl1 : System.Web.UI.UserControl
{
public int Rows
{
get { return (int)(ViewState["Rows"] ?? 1); }
set { ViewState["Rows"] = value; Page_Load(null, null); }
}
public int Cols
{
get { return (int)(ViewState["Cols"] ?? 1); }
set { ViewState["Cols"] = value; Page_Load(null, null); }
}
protected void Page_Load(object sender, EventArgs e)
{
List<TableRow> rows = new List<TableRow>();
for (int i = 0; i < Rows; i++)
{
TableRow tr = new TableRow();
for (int j = 0; j < Cols; j++)
{
TableCell tc = new TableCell();
TextBox tb = new TextBox();
tb.ID = "tb" + i + "_" + j;
tb.Text = GetValue(i, j);
tc.Controls.Add(tb);
tr.Cells.Add(tc);
}
rows.Add(tr);
}
this.Table1.Controls.Clear();
this.Table1.Rows.AddRange(rows.ToArray());
}
public string GetValue(int row, int col)
{
TextBox tb = FindControl("tb" + row + "_" + col) as TextBox;
return tb != null ? tb.Text : "";
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<%@ Register Src="~/WebUserControl1.ascx" TagName="WebUserControl1" TagPrefix="my" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>test</title>
</head>
<body>
<form id="form1" runat="server">
<my:WebUserControl1 ID="WebUserControl1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="添加行" OnClick="AddRow" />
<asp:Button ID="Button2" runat="server" Text="添加列" OnClick="AddCol" />
<asp:Button ID="Button3" runat="server" Text="显示当前动态控件中的值" OnClick="ShowValues" /><br />
<asp:Label ID="Label1" runat="server"></asp:Label>
</form>
</body>
</html>
<script runat="server">
protected void AddRow(object sender, EventArgs e)
{
this.WebUserControl1.Rows++;
}
protected void AddCol(object sender, EventArgs e)
{
this.WebUserControl1.Cols++;
}
protected void ShowValues(object sender, EventArgs e)
{
string values = "";
for (int i = 0; i < WebUserControl1.Rows; i++)
{
for (int j = 0; j < WebUserControl1.Cols; j++)
{
values += (j > 0 ? ", " : "") + WebUserControl1.GetValue(i, j);
}
values += "<br>";
}
Label1.Text = values;
}
</script>