我用SqlDataSource与gridview、DetailsView配合,感觉的确比1.1版好用,不用写一句代码就就搞定对数据的添加、删除、更新的操作,爽!!
但我想不明白,在1.1版中数据绑定一般在if(!this.isPostBack){}中绑定数据,便在2.0中直接用SqlDataSource,那么是不是意味着每次postback都要从数据库中获取数据???

解决方案 »

  1.   

    在1.1版中数据绑定一般在if(!this.isPostBack){}中绑定数据
    ------------------------------------------------------
    这是你的误解,大概你没有写过几个应用。例如,在Datagrid中有模板列,要根据用户提交的模板列的值进行进一步处理,那么必须首先在 Page_Load 时间结束之前重建(重新绑定)DataGrid,所以放在这个 if 判断中肯定是错的。只有根本不需要读取DataGrid的客户端操作结果,而每一个事件都能自动重建DataGrid的时候才可以放在 if 判断中。当页面上有一些无关的交互区域(例如有一个按钮或者用户控件用于用户登录,提交的时候就要刷新页面)的时候,页面必须重建,此DataGrid必须重建,放在 if 判断中会让DtaGrid消失不见的。所以,其实少部分情况是要放在 if 判断中的。但是如果你读的是入门书上的简单例子,页面上只有DataGrid这么简单的内容,没有我上面说的“无关的交互区域”的内容,它是集中演示这里所说的“少部分情况”的,书上的简单流程如果你套用在自己的复杂一点的页面上反而不行。所以开发者要抛开那些入门书给你灌输的所谓模式,要从机制上取理解,自己设计流程,不要套用模式。
      

  2.   

    实际上,对于那些写在你说的 if 判断中的代码,去掉 if 判断通常也是完全一样的,只是程序多花零点几秒钟作了无用功。把它理解为按照逻辑要求“必须”放在 if 判断中,这是不对的!有这么深刻的模式烙印但是完全没有从机制的角度去自然地理解为什么要这样。
      

  3.   

    上楼的大哥,可能你误解我的意思了,“if(!this.isPostBack){}”一般不是放在Page_Load中吗?
    第一次加载页面时当然要,“if(!this.isPostBack){}”中绑定数据了
      

  4.   

    楼上的只是告诉你,在页面没有交互的情况下,比如重新提交了按扭,
    有没有 if(!this.isPostBack){} 效果一样,同时告诉你时间也是成本:)