我的一个页面,是根据用户的查询条件查询出数据,并绑定到GridView中,并且用户可以将数据转换为Excel中下载。我是根据一个Excel模板生成一个Excel文件,通过文件流的方式供用户下载的。但是因为这个模板文件,当多个用户同时下载时,则引发异常。寻求CSDN的.Net达人解决DataSet数据根据Excel模板生成Excel文件并发生成下载问题。谢谢。

解决方案 »

  1.   

    你生成Excel后,保存到服务器的目录中不就行了
      

  2.   

     //override掉这个方法
        public override void VerifyRenderingInServerForm(Control control)
        {
            //注释掉下面的代码,否则在asp.net2.0下会报错(注:GridView是asp.net 2.0下的控件,1.1下一些控件也可以导出成Excel或者Word)
            //base.VerifyRenderingInServerForm(control);
        }
        protected void Page_Load(object sender, EventArgs e)
        {    }
        protected void ibtnQuery_Click(object sender, ImageClickEventArgs e)
        {
            FillData();
        }
        void FillData()
        {
            DataTable dt = new DataTable();
            dt=cn.GetData(" select * from stn_stonestock where "+GetWhere());
            GV.DataSource = dt;
            GV.DataBind();
            //pc.SetControl(1, ConfigurationManager.ConnectionStrings["StoneERP"].ConnectionString, "stn_stonestock", "*", "stonecode", 0, GetWhere(), "20",1, "GV");
            //pc.FillData("1");
        }    string GetWhere()
        {
            
    //......
        }
        protected void ibtn2Execl_Click(object sender, ImageClickEventArgs e)
        {
       
            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=stone.xls");
            Response.Charset = "";
          // Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = "application/vnd.xls";
            System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite =    new HtmlTextWriter(stringWrite);
            // turn off paging 
            GV.AllowPaging = false;
            FillData();
            GV.RenderControl(htmlWrite);
            Response.Write(stringWrite.ToString());
            Response.End();
            // turn the paging on again 
            GV.AllowPaging = true;
            FillData();
        }
    是用的上面的方法吗?
      

  3.   

    类似于三楼朋友的算法。DataSet中的数据转Excel时,耗时较长,有时1~2分钟。这个时候,别人再人再点“生成Excel”时就会出错了。是不是这里需要用到多线程?请朋友探讨。
      

  4.   

    记得lock关键字吗?把这个操作用lock锁起来
      

  5.   

    up! dear firends, please continue!