解决方案 »

  1.   

    查询之后先把查询出来的东西 给viewstate然后绑定的时候 从viewstate里取导出的时候也从viewstate里取 就OK了
      

  2.   


    public datatable dt
        {
            get
            {
                object o = ViewState["dt"];
                return o == null ?null: o as datatable
            }
            set
            {
                ViewState["dt"] = value;
            }
        }
      

  3.   

    定个隐藏input  然后后台赋值json格式的字符串数据
    点导出后 获得input的值  导出excel.
      

  4.   


    dt=xxxxxxxxx.get........
    xxoo.datascore=dt;
    xxoo.databind();
    导出的话也直接调用dt就行了
      

  5.   

    用过一次这个的!但是这个貌似只适合变量数据,字符串,数值啥的
    我存储的是报表大数据!用它的话,每次页面回发的话,都会在服务器和客户端之间来回传递(以hidden存储的方式),说实话,负担有点大,我就是想改改看看有没有其他的方法!
      

  6.   

    数据量稍大,viewstate就不合适,学会cache很重要,就拿我一个项目来说,有几张表数据都上千万,当然,我的意思是别把它们全部cache了,不现实,除非你的项目有这样的要求,比如一些游戏的服务端,但一些关键数据还是可以cache的,比如你这个。
      

  7.   

    之前没用过缓存,能不能贴个缓存的实例,参考一下HttpContext.Cache["1"] = data;
    var cachedData=HttpContext.Cache["1"] as data;
      

  8.   

    不行,必须得有一个权衡,
    如果是viewstate,那么数据过大了会占带宽,影像画面响应速度。
    如果缓存,那么大数据会占用很大的服务器内存。优化方案是只缓存一个范围的数据,取数据再范围之外时,去掉之前的数据,缓存新数据
      

  9.   

    另外,如果你的javascript开发比较正规的话,那么其实“导出excel”是应该由ajax方法把数据“传回”给后台服务,然后后台服务返回一个用于下载的临时文件 url (excel文件地址),然后前端打开一个子窗口来加载这个 url。可能因为你只会asp.net,所以不太会javascript。
      

  10.   

    用户缓存策略吧,cache【】=。
      

  11.   


    大神能不能给个例子,参考一下!之前在网上找到 例子,用缓存数据,缓存一下,可是,碰到了一个棘手的问题,就是,iis回收机制,自动把cache缓存的数据,给清理了,我设置了缓存的时间失效!
      

  12.   

    http://www.cnblogs.com/pctzhang/archive/2010/03/28/1699046.html
      

  13.   

    数据存在缓存
    临时存储excel
      

  14.   


    大神能不能给个例子,参考一下!之前在网上找到 例子,用缓存数据,缓存一下,可是,碰到了一个棘手的问题,就是,iis回收机制,自动把cache缓存的数据,给清理了,我设置了缓存的时间失效!
    在iis中查看回收的时间设置成了多少,延长回收的时间试试 
    或者在页面第一次加载的时候使用ajax方式加载数据,然后把查询出来的数据保存到一个隐藏域中,导出excel的按钮,不用服务器控件,用普通的html控件例如button,使用js在按钮被单击的时候,把隐藏域中存储的数据取出来
      

  15.   

    复制并保存大数据
      public void CopyFile(string FormerFile, string toFile, int SectSize)
            {
                FileStream fileToCreate = new FileStream(toFile, FileMode.Create); //创建目的文件,如果已存在将被覆盖
                fileToCreate.Close(); //关闭所有资源
                fileToCreate.Dispose(); //释放所有资源
                FormerOpen = new FileStream(FormerFile, FileMode.Open, FileAccess.Read);//以只读方式打开源文件
                ToFileOpen = new FileStream(toFile, FileMode.Append, FileAccess.Write); //以写方式打开目的文件
                //根据一次传输的大小,计算传输的个数
                int FileSize; //要拷贝的文件的大小
                //如果分段拷贝,即每次拷贝内容小于文件总长度
                if (SectSize < FormerOpen.Length)
                {
                    byte[] buffer = new byte[SectSize]; //根据传输的大小,定义一个字节数组
                    int copied = 0; //记录传输的大小
                    while (copied <= ((int)FormerOpen.Length - SectSize)) //拷贝主体部分
                    {
                        FileSize = FormerOpen.Read(buffer, 0, SectSize); //从0开始读,每次最大读SectSize
                        FormerOpen.Flush(); //清空缓存
                        ToFileOpen.Write(buffer, 0, SectSize); //向目的文件写入字节
                        ToFileOpen.Flush(); //清空缓存
                        ToFileOpen.Position = FormerOpen.Position; //使源文件和目的文件流的位置相同
                        copied += FileSize; //记录已拷贝的大小
                    }
                    int left = (int)FormerOpen.Length - copied; //获取剩余大小
                    FileSize = FormerOpen.Read(buffer, 0, left); //读取剩余的字节
                    FormerOpen.Flush(); //清空缓存
                    ToFileOpen.Write(buffer, 0, left); //写入剩余的部分
                    ToFileOpen.Flush(); //清空缓存
                }
                //如果整体拷贝,即每次拷贝内容大于文件总长度
                else
                {
                    byte[] buffer = new byte[FormerOpen.Length]; //获取文件的大小
                    FormerOpen.Read(buffer, 0, (int)FormerOpen.Length); //读取源文件的字节
                    FormerOpen.Flush(); //清空缓存
                    ToFileOpen.Write(buffer, 0, (int)FormerOpen.Length); //写放字节
                    ToFileOpen.Flush(); //清空缓存
                }
                FormerOpen.Close(); //释放所有资源
                ToFileOpen.Close(); //释放所有资源
                MessageBox.Show("文件复制完成");
            }