自定义网格视图上的搜索按钮只需单击两次即可触发事件
本文关键字:两次 事件 单击 视图 网格 搜索 按钮 自定义 | 更新日期: 2023-09-27 18:31:02
我有一个自定义的网格控件,该控件继承自具有搜索和分页功能的网格视图。除了这件小事,一切都很好。每当我使用寻呼机转到下一页时,我都会使用搜索,处理搜索的事件不会在第一次单击时触发,需要第二次单击才能触发。有什么想法吗?
控件的代码如下所示:
网格.cs
重要说明
我知道发布大块代码是不受欢迎的......但是,发布整个控件的代码是为了提供其生成方式的全貌。控件本身有点复杂,因为它在所有服务器端执行搜索、排序和分页;此代码是一个完全自定义的控件,它只是继承 GridView。
我不是在寻找某人为我编写修复程序,只是想知道为什么会发生这种情况!
话虽如此,用代码进一步分解一下......搜索窗体(文本框和按钮)是动态创建的,并添加到 CreateChildControls 方法中。最初加载 Grid 时,搜索表单可以完美运行,但在使用分页后,第一次单击"搜索"按钮不会触发分配给"搜索"按钮的命令事件的方法,但第二次单击会触发。回发中的某些内容似乎无法识别按钮的命令事件已触发......
对方法调用的跟踪显示:
第一次单击 - 加载 ViewState 中的所有内容,不调用任何回发事件。
第二次单击 - 加载 ViewState 中的所有内容,并调用回发事件。
我正在寻找关于从这里开始的想法,因为我一直在尝试我能想到的一切页面生命周期明智,看看我是否可以让它正常运行。唯一有效的方法是在实现 Grid 控件的页面上将 EnableEventValidation 设置为 false,并在每个"Page_Load"上执行"初始"数据绑定(不仅仅是"if !回发")。但是,出于显而易见的原因,这不是一个可接受的解决方案。
发现问题...在这里发布任何可能犯类似错误的人。
在 CreateChildControls() 中,我在将搜索表单添加到控件之前执行了基础。添加搜索表单后,只需切换到调用基数,并摆脱条件"如果(这个。HasControls())"解决了它。据我所知,在添加任何子控件后调用 base 允许这些子控件正确注册其事件/处理程序。