读书人

!动态添加控件并绑定事件有关问题

发布时间: 2012-03-19 22:03:05 作者: rapoo

高手请进!!!动态添加控件并绑定事件问题
小弟(菜鸟)打算写一个用户控件,遇到了动态添加控件事件绑定的问题:
用户控件代码如下:

aspx 页:
<asp:Table ID= "tb_SC " runat= "server ">
<asp:TableHeaderRow ID= "th_01 " runat= "server " Width= "100% ">
<asp:TableCell HorizontalAlign= "Center " ID= "tc_01 " runat= "server ">
</asp:TableCell>
</asp:TableHeaderRow>
<asp:TableRow ID= "tr_01 " runat= "server " Width= "100% "> </asp:TableRow>
</asp:Table>

cs 页:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Create();
}
}

private void Create()
{
//动态生成签字位名称、内容及按钮
for (int i = 0; i < dt.Rows.Count; i++)
{
Button btn_Yes = new Button();
btn_Yes.ID = "btn_Yes_ " + i.ToString();
btn_Yes.Text = "Yes ";
btn_Yes.Click += new EventHandler(btn_Yes_Click);

//不同意按钮
Button btn_No = new Button();
btn_No.ID = "btn_No_ " + i.ToString();
btn_No.Text = "No ";
btn_No.Click += new EventHandler(btn_No_Click);

TableCell tc2 = new TableCell();
tc2.Controls.Add(btn_Yes);
tc2.Controls.Add(btn_No);

//将两列添加到行中
tr_01.Controls.Add(tc1);
tr_01.Controls.Add(tc2);
}
}

private void btn_Yes_Click(Object sender, EventArgs e)
{
//事件处理
}

private void btn_No_Click(Object sender, EventArgs e)
{
//事件处理
}

如何才能把按钮单击事件绑定到我动态添加的按钮上?请指教!!!
在调用用户控件事激发呀?


急!急!急!


[解决办法]
你的代码缺乏很多细节方面的把握。暂时主要先按你的方式写:

<asp:Table ID= "tb_SC " runat= "server ">
<asp:TableHeaderRow ID= "th_01 " runat= "server " Width= "100% ">
</asp:TableHeaderRow>
<asp:TableRow ID= "tr_01 " runat= "server " Width= "100% "> </asp:TableRow>
</asp:Table>


cs代码:

private bool SubControlsCreated=false;

protected void Page_Load(object sender, EventArgs e)
{
if (!SubControlsCreated)
{
Create();
}
}

protected void Page_PreRender(object sender, EventArgs e)
{
if (!SubControlsCreated)
{
Create();
}
}

private void Create()
{
th_01.Cells.Clear();
tr_01.Cells.Clear();
//动态生成签字位名称、内容及按钮
for (int i = 0; i < dt.Rows.Count; i++)
{
Button btn_Yes = new Button();
btn_Yes.ID = "btn_Yes_ " + i.ToString();
btn_Yes.Text = "Yes ";
btn_Yes.Click += new EventHandler(btn_Yes_Click);

//不同意按钮
Button btn_No = new Button();
btn_No.ID = "btn_No_ " + i.ToString();
btn_No.Text = "No ";
btn_No.Click += new EventHandler(btn_No_Click);

TableCell tc2 = new TableCell();
tc2.Controls.Add(btn_Yes);
tc2.Controls.Add(btn_No);

//将两列添加到行中
tr_01.Cells.Add(tc1);
tr_01.Cells.Add(tc2);
}
TableCell tc01=new TableCell();
tc01.HorizontalAlign=HorizontalAlign.Center;
tc01.ColSpan=2 * dt.Rows.Count;
th_01.Cells.Add(tc01);
SubControlsCreated=true;
}

private void btn_Yes_Click(Object sender, EventArgs e)
{
//事件处理。假如需要刷新Table,写 SubControlsCreated=false。
}

private void btn_No_Click(Object sender, EventArgs e)
{
//事件处理。假如需要刷新Table,写 SubControlsCreated=false。
}


注意,可以很明白地说,你从书上抄来的所谓“if (!IsPostBack)”的所有观念此时都是错的。一个控件,它在某次postback之后重新装入,或者可能原本在页面上并没有而是在某个操作之后被动态产生和装入,它并不是只在 (!IsPostBack) 的时候装入。控件中不要写这种“if (!IsPostBack)”代码。

读书人网 >asp.net

热点推荐