我有一个自定义的Grid控件,它继承自Gridview,具有搜索和分页功能。除了这一件小事,一切都很好。每当我使用寻呼机转到下一页,然后我使用搜索,处理搜索的事件不会在第一次点击时触发,只需点击一下即可触发。有什么想法吗?
控件的代码在这里:
重要提示
我知道发布大块代码是不赞成的......但是,整个控件的代码都会被发布,以便全面了解它是如何构建的。控件本身有点复杂,因为它在服务器端执行搜索,排序和分页;而且这段代码是一个完全自定义的控件,它只是INETITS GridView。
我不是在找人为我写一个修补程序,只是想知道为什么会出现这种情况!
据说,用代码分解一下......搜索表单(文本框和按钮)是动态创建的,并添加到CreateChildControls方法中。最初加载网格时,搜索表单非常有效,但在使用分页后,第一次单击“搜索”按钮不会触发分配给“搜索”按钮的命令事件的方法,但第二次单击会执行。似乎回发中的某些东西没有识别按钮的命令事件已被触发......
对方法的调用显示:
第一次点击 - 加载ViewState中的所有内容,不会调用回发事件。
第二次点击 - 加载ViewState中的所有内容,调用回发事件。
我正在寻找关于从哪里开始的想法,因为我一直在尝试我能想到的页面生命周期的一切,看看我能否正常运行。唯一有效的方法是在实现Grid控件的页面上将EnableEventValidation设置为false,并在每个“Page_Load”(不仅仅是“if!IsPostback”)上执行“初始”数据绑定。但是,由于显而易见的原因,这不是一个可接受的解决方案。
答案 0 :(得分:1)
发现问题......在这里发布可能犯同样错误的人。
在CreateChildControls()中,我在将搜索表单添加到控件之前执行了基础。一个简单的切换,在添加搜索表单后调用基础,并摆脱条件“if(this.HasControls())”解决它。从我所看到的,在添加任何子控件之后调用基础允许这些子控件正确地注册它们的事件/处理程序。