posts - 2,comments - 13,trackbacks - 0

   大家都知道,当GridVew和ObjectDataSource在一起搭配使用时,如指定GridVew的DataSrouceID为ObjectDataSource时,这个时候程序可以不用调用DataBind()方法进行数据绑定,程序会默认在页面中所有事件结束后,程序会默认调用一次DataBind()。
   以上这些大家应该都很清楚,但我最近无意发现一个现象,例如我们在页面的某一button的onclick事件里修改了ObjectDataSource的Select参数的默认值,我们先在button里不写GridView.DataBind(),我在程序中设置断点跟踪发现,程序的运行结果是,先运行page_load()->Button的OnClick事件->调用默认的DataBind()。 而如果我们在这一Button的onclick事件里写上GridView.DataBind()的话,程序运行结果就是page_load->Button的OnClick事件->在Button的OnClick事件里调用我们写的DataBind()方法。
  大家有没有发现,原本在onclick事件结束后,程序会默认调用的DataBind()不会再调用了。
  以此类推,如果我们在Page_Load中调用DataBind()的话,那么程序运行结果就会是Page_Load->运行Page_Load中的DataBind(),而不会在Page_Load结束后调用默认的DataBind() 
  以上是我的一个小发现(也许很多人都发现了^_^),不知道大家对这个问题是怎么理解的,欢迎大家接着对我提的这个问题继续讨论下~~~  大家交流交流~~~
 (ps:昨天开始写的没写清楚,可能把大家搞糊涂了,现在修改了下)

posted on 2008-04-25 22:26 niat_alex 阅读(1828) 评论(11)  编辑 收藏 网摘 所属分类: asp.net

FeedBack:
2008-04-25 22:52 | Jeffrey Zhao      
其实我都没有关注到这一点……
  回复  引用  查看    
2008-04-25 22:55 | 苏州网站建设[未注册用户]
还没发现。谢谢噢
  回复  引用    
2008-04-26 01:00 | Cat Chen      
自己用Reflector打开慢慢研究吧,嘻嘻~

首先,重复绑定不是什么问题,这个DataControl内部自己负责任。理论上,无论被调用DataBind()多少次,都是绑定最后一次的。

你在OnClick时候调用DataBind(),确实是执行两次的,而非执行一次。

  回复  引用  查看    
2008-04-26 01:02 | Cat Chen      
@Jeffrey Zhao
你怎么能不关心这个呢?虽然可能你完全不用自动绑定,但这是ASP.NET 2.0中很好玩的一个部分嘛。

  回复  引用  查看    
2008-04-26 01:55 | Jeffrey Zhao      
@Cat Chen
真的没有关心这些东西啊,呵呵。
其实ASP.NET好玩的东西很多,太多东西没有写进文档了。

  回复  引用  查看    
2008-04-26 09:31 | 莫非ASP.NET可以自动分析源码      
http://www.cnblogs.com/Emoticons/msn/omg_smile.gif" alt="" />真有这样的事儿?
  回复  引用  查看    
2008-04-26 10:14 | 阿不      
DataSouce的绑定,里面会有相应的状态位来判断是否需要执行绑定动作。
另外就是DataSource的绑定是在OnPreRender事件中执行的
除非你禁用了ViewState,禁用ViewState由于状态还原的需要,会在LoadAllState的时候初始化一次数据控件。

  回复  引用  查看    
#8楼[楼主]
2008-04-26 11:29 | niat_alex      
to:@Cat Chen
--引用--------------------------------------------------
Cat Chen: 自己用Reflector打开慢慢研究吧,嘻嘻~

首先,重复绑定不是什么问题,这个DataControl内部自己负责任。理论上,无论被调用DataBind()多少次,都是绑定最后一次的。

你在OnClick时候调用DataBind(),确实是执行两次的,而非执行一次。
--------------------------------------------------------
onClick时候调用DataBind(),确实执行两次???
是我上面没说清楚,我本来的意思是,如果你在onclick里有一条类似给objectdatasource的select默认参数值修改的话,那么如果你此时不写databind()方法的话,那么程序会在运行完onclick事件后,调用一次默认得databind,这就是所谓的自动绑定,而如果你在onclick事件里写了databind(),那么程序在调用完我们自己写的databind()方法后,当onclick事件退出后,就不会再调用默认的DataBind()方法。
而我所谓的一次是说,如果我们显示调用DataBind的话,那原本默认调用的DataBind就不会运行,这个时候DataBind不会重复执行,只会执行一次,如上面的例子,我是考虑程序在运行OnClick开始计算,DataBind只会执行一次。

  回复  引用  查看    
#9楼[楼主]
2008-04-26 11:36 | niat_alex      
@阿不
多谢,我也是这么理解的,看了你的说法后,我清晰多了~ 收益了:)

  回复  引用  查看    
2008-04-27 20:23 | 镜涛      
没注意到这个问题。看样子自己研究问题还是不细致啊!
  回复  引用  查看    
2008-06-06 22:00 | BAsil      
关注
  回复  引用  查看    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1171622




相关文章:

相关链接: