updatepanel里面的gridview要自己进行分页,而且分页的linkbutton都要自己加,经过一天一夜的奋战,终于能够解决了。
1,在updatepanel里面动态添加linkbutton,初始代码如下:
LinkButton lb = new LinkButton();
lb.Text = "test";
lb.Click += new EventHandler(subs);
PlaceHolder1.Controls.Add(lb);
protected void subs(object sender, EventArgs e)
{
bind();
}
结果发现点击linkbutton的时候,页面会刷新,而我的linkbutton是放在updatepanel里面的,于是上网找资料,终于解决:
给lb加个id即可。
lb.ID="test";
2,问题又来了,点击linkbutton控件按钮后,事件没有响应,而且linkbutton按钮不见了。
一开始以为是自己的代码写错了,不断检查click事件的绑定,还是没错。
3,调试了很久,终于明白了,当把这个代码写在page_load事件中的时候,可以执行。但是我的代码要判断当前页一些参数后才调用的,于是就有了问题了,如果不判断直接加,会每次累加。如果判断了再加,则在刷新页面或者第二次提交后,就会不响应事件。
4,原因,找了很久,终于明白了。在updatepanel中的控件提交后台后,返回来是先执行page_load事件,再执行控件的响应事件的!这个顺序很重要。所以,只要页面上提交了,但是因为我是再次提交,在我的page_load事件中绕过了更新代码,才出现这样的问题。于是我在控件提交的代码中来动态生成linkbutton。这样,在控件提交后,先执行了page_load,然后再执行我的控件事件,然后调用生成代码生成linkbutton。
由于每次page_load进来的时候,动态控件都是空的,然后再生成linkbutton控件,这样就不会产生多余数据了。
5,但是linkbutton的点击事件仍然没有响应。
上网找了很多地方,仍然没有结果。但是在弄明白了前面的顺序后,调试如下,就可以了:
在page_load中给一个linkbutton,绑定事件,这个linkbutton是可以响应事件的。(注意,这个不赋予任何页面控件,只是为了让下面生成的控件能识别到响应事件函数。)
然后在按照上面的说法,在需要动态生成的时候,比如点击button1,生成linkbutton。在button1,的onclick事件中写
LinkButton lb = new LinkButton();
lb.Text = "test";
lb.ID="test";
lb.Click += new EventHandler(subs);
PlaceHolder1.Controls.Add(lb);
这样一来,只要点击button1按钮,就可以自动生成这个linkbutton,而且响应subs函数。
注意的是,只有这个button有效,如果换了别的按钮的话,只要里面没有写生成linkbutton的代码,就不会生成linkbutton。
说明:上述所有的控件均放在updatepanel中。