是这样子的,页面中一个gridview 一个textbox。我点击一个按钮postback回服务器端后,我在page_Load方法中可以得到textbox的值,而不能得到gridview的datasource? 而且在render方法的时候依旧取不到gridview的datasource,但是输出的客户端口gridveiw依然显示数据,我感到很奇怪,它在服务器端没重新用veiwstate加载值么? 但是我把页面的enableviewstate设为false的话,输出到客户端后,girdview就是空的,证明它在服务器端确实用veiwstate 加载数据了。。

解决方案 »

  1.   

    就像你说的。它把gridview的数据保存在viewstate里了
      

  2.   

    datasource 又不会保存的了....如果要用原始数据的话,就用VIEWSTATE或者SESSION保存吧
      

  3.   

    GridView是不保存DataSource状态的。这也好理解,它太占存储了。关键是,如果你跟踪GridView的事件,你会发现使用一个button来测试页面回发时,GridView并不需要重新读取数据源。因此,我们可以看到有许多所谓“范例”程序有这样的代码:    void Page_Load(object sender, EventArgs e)
       {
           if(!IsPostback)
           {
                BindData();
           }
       }可以说这类代码是又慢又有错误的。但是这类asp.net1.1风格的错误代码在网上非常普遍,所以我建议你使用数据源控件在使用现成的控制逻辑,而避免在这个地方手写代码。实际上,在回发时GridView需要恢复的是上一次页面输出时的控件树结构,而不是从数据库中去绑定现在的数据来产生控件结构。一个简单的button测试,如果你从刚开始学编程时就频繁地使用这个测试,你就能够很早就发现和解决很多似是而非的asp.net编程“范例”里边的bug来。
      

  4.   


    我想问下 如果使用
     void Page_Load(object sender, EventArgs e) 
      { 
          if(!IsPostback) 
          { 
                BindData(); 
          } 
      }
    这种方法绑定gridview,在回发的时候好像也没有重新绑定数据源呀,因为它在if(!IsPostback) 中。为什么说这种方法是错误的呢?不太明白?能不能解释下?