上面代码应该是: if (Cache["productDataGrid"] == null)
写错了, 写成: if (Cache["productDataGrid"] == dt)了

解决方案 »

  1.   


    if (Cache["productDataGrid"] == null)
    {
        //生成DataTable的代码, 并且加入Cache
    }
    else
    {
        dt = (DataTable)Cache["productDataGrid"];
    }
      

  2.   

    应该是
    DataTable dt;
    if (Cache["productDataGrid"] == null) //如果cache为空,则获取数据源并加入到cache中
    {
    //生成DataTable的代码, 并且加入Cache
    }
    else
    {
    dt = (DataTable)Cache["productDataGrid"]; // cache不为空则直接赋给Datatable
    }正如楼上如所,lz 写错了
      

  3.   

    谢谢楼上两位, 我不是改过来了吗? 二楼不就是我吗?这个问题我已经想到了一个办法, 就是:
    ----------------------------------------
    if (Cache["productDataGrid"] == null)
    {
        //
    }
    else
    {
        dt = (DataTable)Cache["productDataGrid"];
        -------------------------
        if (dt.DataSet != null)
        {
           dt.DataSet.Tables.Remove(dt);
        }
        --------------------------
    }想了一下, 原因应该是, DataTable有一个属性叫DataSet, 刚建立时它为空
    一旦将DataTable加到一个DataSet后, 如MyDataSet.Tables.Add(dt),
    那么这个DataTable的DataSet的属性不再是空, 而变成MyDataSet了.加入Cache后, DataTable的那个DataSet属性并没有自动清空, 第二次访问页面,
    这个Cache中的DataTable还是保留原来那个实际已经不存在的DataSet了.
      

  4.   

    if (dt.DataSet != null)
        {
           dt.DataSet.Tables.Remove(dt);
        }---------------
    正确!