爬墙ing

青蛙听到乌龟的话后,开始觉悟了,所以它要爬出井底,去寻找属于它自己的大海

   :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
在一次课上,讲解ItemCommand事件和DeleteCommand事件的时候,学生问我为什么每次点了CommandName为“delete”的按钮的时候ItemCommand事件也被触发了呢?因为我平时写程序的时候没注意这个问题,一下子还真把我难住了! 回办公室后反复做了实验(通过打开页面的Trace跟踪,在相应的事件里用Trace.Warn()方法输出),最后得出结论:

1、ItemCommand事件是DataList控件产生的默认事件,任何DataList控件中CommandName为delete/cancel/update/edit的按钮被点击后,首先触发的是ItemCommand事件,然后才是相应的事件。

2、但是当DataList控件中存在一个普通按钮,点击后触发ItemCommand事件,假设执行功能为选择当前项,此时如果点击了CommandName为edit的按钮,将当前项显示为编辑状态。这个时候并没有出现当前行既被选中又被编辑的情形,这和以上的结论(先触发ItemCommand事件)好象相违背。事实上这并不矛盾,因为DataList控件中的项同一时刻只能显示一个模板,所以执行过程应该是这样的。点击了CommandName为edit的按钮后首先触发了ItemCommand事件,将当前的项显示为SelectedItemTemplate模板,然后再触发EditCommand事件,将当前的项显示为EditItemTemplate模板,覆盖了前面已经显示的SelectedItemTemplate模板,只不过因为速度太快,肉眼看不出这个过程而已! 
posted on 2006-07-19 11:06 中国土匪 阅读(887) 评论(3)  编辑 收藏 所属分类: 无聊的事

评论

这篇文章不正确,原文讲到:
==========================
执行过程应该是这样的。点击了CommandName为edit的按钮后首先触发了ItemCommand事件,将当前的项显示为SelectedItemTemplate模板,然后再触发EditCommand事件,将当前的项显示为EditItemTemplate模板,覆盖了前面已经显示的SelectedItemTemplate模板,只不过因为速度太快,肉眼看不出这个过程而已!
==========================
ASP.net是在服务端执行的,在处理一次postback的时候,客户端怎么会有显示呢?这一切过程是在服务端完成。所以不是因为太快,肉眼才看不到。是因为根本就只显示了EditItemTemplate模板而己。
  回复  引用    

#2楼 [楼主] 2006-08-29 23:07 中国土匪      
当初转这篇文章的时候只是注意到了它里面关于Command事件执行顺序的解释,的确没有主要到这个纰漏,谢谢提醒。
ps:现在越来月觉得Edit,Update等Command没什么用了,全部写item里面就是了,方便!
  回复  引用  查看    

ASP.net很怪异。等把它研究透了。自己的框架都能写出来了。
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: