放在ISpostBack里,如果不重绑是不会丢的

解决方案 »

  1.   

    Post Back 的时候又执行了一次绑定Gridview的代码
    所以丢失了之前的状态。如果直接把数据加到Gridview的数据源里面,重新绑定也不会丢失新加的行
      

  2.   

    刷新页面,你绑定这个gridview没?
      

  3.   

    我的做法是在数据库里加一个临时表,用于保存临时添加的行,每次回发就读出来,把这个页面关闭或者不想要这个GridView了,就删除临时表里的所有数据。
      

  4.   

    首先要明白,不是每次回发要绑定数据。如果你按照Scott Mitchell的教程上的随便一个例子在GridView旁边放置一个SqlDataSource或者ObjectDataSource作为其数据源,设置中断监视数据源的Select事件何时发生,你会看到当回发时根本不重新读取后台数据。回发时,要求重新建立上一次页面输出html时的完整控件树,包括每一个控件的id都不能错。如果在多用户情况或者后台数据处理的情况下,数据库改变了,如果多余地重新绑定数据库数据,不但空费大量时间,而且很可能根据已经改变了的数据库内容重建了错误的GridView内部控件树。实际上只能根据当前页面状态数据来重建控件,这才能保证重建的东西与页面上次输出html时的状态相同,而不是根据后台数据库的时刻变动着的数据来重建。当你在个人的单机上勉勉强强看到一个复杂的程序似乎运行正确时,一定要想到内部机制是否也正确。应该很多过去的范例程序都是错误的,特别是在page_load中读取后台数据重新绑定控件的做法是错误的。在单机上,以及某些特别简单的界面设计下,很可能让过去错误的一些“范例”通过。因此最好使用数据源控件,因为它是经过考验的,你可以尽量不写代码,你不了解的针对GridView的许多编程机制他都封装好了。在使用了数据源控件之后,你只要在相应的业务处理事件(page_loadcompleted之后的)中对数据增加一行,例如对数据库增加一行,或者对内存中的对象集合增加一行,然后调用GridView.DataBind();就可以了。不需要去回发时在page_load中应该怎样写,那里去写代码绑定后台数据是不对的,数据源控件会根据状态值自动完成重建GridView的行。
      

  5.   

    我对自己有一个asp.net2.0编程规定:绝对不能在page_load彻底完成之前出现“控件.DataBind()”这类代码,应该都是通过数据源控件来简化编程。那种在page_load中出现绑定数据的代码的做法,是asp.net1.1时代的产物,很多“范例”写法其内部机制推敲起来都是有错的。
      

  6.   

    不需要去回发时在page_load中应该怎样写   -->   不需要去回发时在page_load中涉及任何绑定数据代码实际上,如果数据源控件需要访问后台数据,它也是在页面的PreRender那个阶段才读取。而在page_load时重建(保持)控件时根本不读取后台数据。网上以及很多入门书上还是能看到很多asp.net 1.1时代著书立说的作者们都不太深入分析asp.net机制而写下来编码。