我在为Datalist做一个分页功能,使用动态添加linkbutton控件的方法来显示页码,动态添加的linkbutton都调用一个事件,可是当点击时事件未被触发,请高手指点。代码如下://显示页码
 protected void AddPageNum()
    {
        divPageNum.Controls.Clear();        if (pageCount == 1 || !ps.AllowPaging) return;
 
            for (int i = 0; i < pageCount; i++)
            {       
                if(i!=currentPage)
                {                LinkButton lbtn = new LinkButton();                lbtn.ID = "lbtn" + i.ToString();
                lbtn.Text = Convert.ToString(i + 1);
                lbtn.ToolTip = " 转到第" + lbtn.Text + "页";
                lbtn.CommandArgument = i.ToString();
                lbtn.OnClientClick += new EventHandler(lbtn_Click); //点击时触发此事件
                                    divPageNum.Controls.Add(lbtn);
                }
                else
                {
                                   Literal li = new Literal();                li.Text = Convert.ToString(i + 1);                li.ID = "li" + i.ToString();                 divPageNum.Controls.Add(li);
                }            }
    //所要触发的事件
    protected void lbtn_Click(Object sender, EventArgs e)
    {
        LinkButton hlSender = (LinkButton)sender;
        int index = Convert.ToInt32(hlSender.Text) - 1;        
        tmpPage = index;
        numFlag = true;
        BindDataList();
        AddPageNum();
    }

解决方案 »

  1.   

    lbtn.OnClientClick += new EventHandler(lbtn_Click); //点击时触发此事件 动态绑定的事件回传时,其事件会丢失
    有两上方案,第一在page_load当中去绑定事件
    第二,保存其事件.
      

  2.   

    如果你是在DataList数据绑定控件内部(比如说PageTemplate)里动态添加控件,那么你就算在Page_Load里添加控件,也会丢失,因为在回发时,数据控件会根据ViewState重建,这时会导致动态添加的控件丢失。应该在RowCreated事件里添加
    like  protected void DataList1_RowCreated(object sender, GridViewRowEventArgs e)
        {
            
                if (e.Row.RowType == DataControlRowType.Pager)
                {
                    Panel ppr = (Panel)e.Row.FindControl("divPageNum."); 
                    if (ppr != null) {
                        AddPageNum(ppr);
                    }
                }            
        }
    不过如果是点击没反应,那么可能是添加事件时有问题,你先看看生成的源码,是否产生了__doPostBack 调用。
      

  3.   

    这点写错了:
    lbtn.OnClientClick += new EventHandler(lbtn_Click); //点击时触发此事件
    ==>
    lbtn.click+=new EventHandler(Lbtn_Click);
    还有,委托事件和控件的动态添加最好写在page_load里,且不受回发约束,即不须用是否回发限制(因为在回发时不保存),每次页面加载(包括首次和回发)即动态添加控件。
      

  4.   

    为什么要绑定到OnClientClick 呢。这个是用来判断是否回发的。