WebForm的Grid页面页脚DropDownList事件[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。
帖子 http://community.csdn.net/Expert/topic/3506/3506615.xml?temp=.5394251 中,提到了一个很有意思的问题。
【我的datagrid的页脚有一个dropdownload控件,如果是一个BUTTON按钮的话,可以在datagrid的 DG_Card_ItemCommand事件里来响应BUTTON按钮的事件,e.CommandName==”IButton_Name”得到
而我现在是一个dropdownload控件,当它选定一条记录的时候,怎么触发他的事件啊】
之前我也曾经看到过类似的问题,想当然的认为加上一个事件不就可以了吗 但是发现 在模板列,或者页眉页脚里面的DropDownList 激发不了Grid的ItemCommand事件 根本捕获不了
这算是一个大大的误区吧,没有任何验证的情况下,我居然认为,Grid里面的其他控件,只能通过激活 Grid的Itemcommand的事件来进行自己的事件操作。浮浅的很,-_-#。
于是就想好好的看看这个问题的到底怎么个意思。
参考了一些资料(包括Sunmast这个小 样 儿的blog),另外和戏子这个JR讨论了一下,终于有点明白了。
转载Sunmast的blog
By icyer(我们的大斑竹) from CSDN
首先来看看这两个事件 ItemDataBound,ItemCreated的发生时间
ItemDataBound嘛,只要执行了DataBind方法,就会马上激发这个事件。 ItemCreated呢,如果页面是第一次访问(Page.IsPostBack = false),那在第一次执行DataBind的时候,会先激发ItemCreated事件,也就是说,执行了DataBind后,首先会用ItemCreated来建立Header行,然后用ItemDataBound来绑定Header行,再用ItemCreated来建立第一行,再调用ItemDataBound来绑定第一行,也就是说ItemCreated和ItemDataBound是交替执行的。 页面返回时,也会执行ItemCreated事件,在Page_Load之前,但是这时候就不会再执行ItemDataBound事件了。
我们写程序的时候,一般都会有这个 Page_Load if(!Page.IsPostBack) { DataGrid1.DataSouce = ……….; DataGrid1.DataBind(); }
所以,在页面第一次加载的时候,我们是执行了这个ItemDataBound事件的。 但是当页面回发的时候,这个ItemDataBound事件就不再执行了。 众所周知,ViewState不会记住控件的事件,只会记住一些属性。 事件的恢复是根据InitializeComponent()这个方法来的。
所以,如果把DropDownList的事件注册,放到ItemDataBound方法里面,页面一个PostBack,事件马上丢失。 但是,如果把DropDownList的事件注册,放到ItemCreated方法里面,即使页面PostBack,事件也不会丢失, 因为Page_Load之前,重新调用了这个ItemCreated方法,这个方法是不受IsPostBack的限制的。
至此,这个问题就很清楚了。
但是,由于每次页面PostBack,都要执行ItemCreated方法,那么肯定会对效率有所影响。所以,我们能不能给出另外一种解决方法呢。戏子这个JR就提出,可以在编辑期间,就给这个DropDownList注册事件。 当然,在Grid模板列里面,点击这个DropDownList没有事件的那个闪电符号可以选择,但是我们可以改他的HTML
<asp:DropDownList id=”DropDownList2″ runat=”server” OnSelectedIndexChange=”ddl_SelectedIndexChanged”></asp:DropDownList>
这样,我们就不用动态的给这个DropDonwList注册事件了 我们仅仅需要在ItemDataBound方法里面来绑定它的数据就可以了 ps:不要忘了把ddl_SelectedIndexChanged这个方法设置为protected
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
相关文章
- 深入理解Spring事件机制(二):事件的推送[通俗易懂]
- Oracle等待事件原因和一般解决方法:control file sequential read
- 在处理PowerBuilder的itemchanged事件中,acceptText的使用介绍[通俗易懂]
- OnContextMenu事件
- Android listView中的button点击事件[通俗易懂]
- JavaScript笔记(16)之事件高级
- Android触屏事件流[通俗易懂]
- 深度分析React源码中的合成事件_2023-02-13
- 事件模型详解编程语言
- 深入浅出:学习Oracle事件(oracle事件)
- SolarWinds 后门事件继续蔓延,微软、Cisco 也成为最新受害者
- js自定义事件及事件交互原理概述(二)
- 详解ASP.NET页面生命周期事件