posts - 2,comments - 12,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 阅读(1720) 评论(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可以自动分析源码      
真有这样的事儿?
  回复  引用  查看    
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      
关注
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-22 08:56 编辑过
 
另存  打印