0

我有一个自定义的 Grid 控件,它继承自具有搜索和分页功能的 Gridview。除了这件小事,一切都很好。每当我使用寻呼机转到下一页,然后我使用搜索,处理搜索的事件不会在第一次点击时触发,需要第二次点击才能触发。有任何想法吗?

控件的代码在这里:

网格.cs

重要的提示

我知道发布大块代码是不受欢迎的……但是,发布整个控件的代码是为了全面了解它是如何构建的。控件本身有点复杂,因为它在所有服务器端执行搜索、排序和分页;这段代码是一个完全自定义的控件,它只是继承了 GridView。

我不是在找人为我编写修复程序,只是想知道为什么会发生这种情况!

话虽如此,用代码进一步分解......搜索表单(文本框和按钮)是动态创建的,并添加到 CreateChildControls 方法中。最初加载 Grid 时,搜索表单工作得很好,但是在使用分页后,第一次单击 Search 按钮不会触发分配给 Search 按钮命令事件的方法,但第二次单击会触发。似乎回发中的某些内容无法识别按钮的命令事件已被触发......

对方法的调用跟踪显示:

第一次点击 - 加载来自 ViewState 的所有内容,不调用回发事件。

第二次点击 - 加载 ViewState 中的所有内容,调用回发事件。

我正在寻找从这里去哪里的想法,因为我一直在尝试所有我能想到的页面生命周期明智的事情,看看我是否能让这个功能正常运行。唯一有效的是在实现 Grid 控件的页面上将 EnableEventValidation 设置为 false,并在每个“Page_Load”(不仅仅是“if !IsPostback”)上执行“初始”数据绑定。但是,由于显而易见的原因,这不是一个可接受的解决方案。

4

1 回答 1

1

找到了问题......在这里为任何可能犯类似错误的人发帖。

在 CreateChildControls() 中,我在将搜索表单添加到控件之前执行了基础。添加搜索表单后,一个简单的切换到调用基础,并摆脱条件“if (this.HasControls())”解决了它。据我所见,在添加任何子控件后调用基础允许这些子控件正确注册其事件/处理程序。

于 2013-09-13T02:11:27.233 回答