首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

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

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

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)”代码。

热点排行