{...获取数据库内容保存到局部变量dt中
Session["DG"] = dt;
dt.Clear();
dt = (DataTable)Session["DG"];
datagird.DataSource = dt;
datagrid.DataBind();}
VS2005中:为什么这样就得不到Session中保存的数据,调试时特意看过原来dt里有数据,我故意这样转换后datagrid中就得不到数据了。
把dt.Clear()这句去掉后datagrid才显示数据,但在同一个页面的其他函数中用DataTable dt = (DataTable)Session["DG"];这句怎么只得到原dt里的字段却没有数据,也就是Session["DG"]并不为null,只是没数据。
用Session保存Datatable是这么用的吧,这到底是什么错误,郁闷死了。

解决方案 »

  1.   

    Session["DG"] = dt;
    Session中保存的是dt的引用
    dt.Clear(); 
    这句将dt清空了,自然session按照引用来获取的是空DataTable了。
      

  2.   

    我就是先把数据库里的数据读取到dt中,然后把用Session来保存dt,以便下次其他函数使用啊。
      

  3.   


    Session["DG"]是引用,dt也是引用 ,clear()是清空引用指向的对象..
      

  4.   

    那我不使用.Clera()这句时在其他函数里也得不到Session里的数据啊。这又怎么解释呢?
      

  5.   

    不要用SESSION保存除了登陆信息之外的其他数据哦 影响效率 而且不是非常安全 最重要的是 里面的值不能及时更新 比如你前一秒更新了数据库 但你的SESSION中还是更新数据库之前的数据
      

  6.   

    你得确保Session["DG"]里不是空才行
      

  7.   

    用法就是在开始时用Session["DG"] = dt保存后在同一页面中的另一个函数如:
    protected void Button_Click()
    {
    DataTable dt=new DataTable();
    dt=(DataTable)Session["DG"];
    datagrid2.DataSource=dt;
    datagrid2.DataBind();
    }用来绑定新的Datagrid控件。
    回11楼:数据原来肯定是有了的,调试时看过的。
    回9楼和10楼:不用这暂存数据那用什么方法的,看一些书上说的都是用Cache暂存,那效率高?还是用其他的方法?另外讲到暂存效率,怎么在页面中暂存一些变量的值,我在页面中使用网上的通用存储过程分页的方法,用ViewState来存储PageIndex,PageSize.除了这方法其他的好像页面一刷新值就没了,主要保存的PageIndex,PageSize值还是动态变化的。这些高手们是用的什么方法,在此先谢谢高手指导。
    对于我提的问题后来经过反复测试发现用DataSet就可以把数据在Session里保存下来,汗。
      

  8.   

    使用方法是没错的,如果你的session没有过期或者你人为清空。使用cache和使用session效果是不相同的,cache是全局的,对每个用户都是一样的,session是针对用户的,不同的用户具有不同的sessinid,然后根据这个id来划分数据的,一般情况下不用session保存数据集的,因为这样访问用户多的话,数据集就会很多,反而不如重新查询的好。
    如果是前台页面显示,一般用cache,这样即所有用户共享一部分数据,只会有一个数据集,比较划算。。