求数据查询集 DATAGRID 生成EXECEL 代码  谢谢大侠

解决方案 »

  1.   

    string User=Session["User"].ToString();  
    Dsc.Ds=Bss.DpcDown(Date,User).Ds;
    string name=Server.MapPath("../").ToString() + @"temp\Schedule"+DateTime.Today.ToString("yyyyMMdd")+new Random(DateTime.Now.Millisecond).Next(10000).ToString()+".csv";//存放到web.config中downloadurl指定的路径,文件格式为当前日期+4位随机数 
    FileStream fs=new FileStream(name,FileMode.Create,FileAccess.Write); 
    StreamWriter sw=new StreamWriter(fs,System.Text.Encoding.GetEncoding("gb2312")); 
    string Head="";
    for(int i=0;i<Dsc.Ds.Tables[0].Columns.Count;i++)
    {
    if(i==Dsc.Ds.Tables[0].Columns.Count-1)
    {
    Head+=Dsc.Ds.Tables[0].Columns[i].ColumnName;
    }
    else
    {
    Head+=Dsc.Ds.Tables[0].Columns[i].ColumnName+","; 
    }
    }
    sw.WriteLine(Head); 
    foreach(DataRow dr in Dsc.Ds.Tables[0].Rows) 

    string Detail="";
    for(int i=0;i<Dsc.Ds.Tables[0].Columns.Count;i++)
    {
    if(i==Dsc.Ds.Tables[0].Columns.Count-1)
    {
    Detail+=dr[i].ToString() ;
    }
    else
    {
    Detail+=dr[i].ToString()+","; 
    }
    }
    sw.WriteLine(Detail); 

    sw.Close(); 
    Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(name)); 
    Response.ContentType = "application/ms-excel";// 指定返回的是一个不能被客户端读取的流,必须被下载 
    Response.WriteFile(name); // 把文件流发送到客户端 
    Response.End();
      

  2.   

     protected void Button1_Click( object sender, System.EventArgs e )
      {
        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "GB2312";
        Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
        // 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
        Response.ContentEncoding = System.Text.Encoding.UTF7;
        Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
        System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
        this.GridView1.RenderControl(oHtmlTextWriter);
        Response.Output.Write(oStringWriter.ToString());
        Response.Flush();
        Response.End();  }
      public override void VerifyRenderingInServerForm( Control control )
      { }值得注意的是VerifyRenderingInServerForm重载方法:
    MSDN上的 VerifyRenderingInServerForm 方法的描述:
      必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息。发送回或依赖于注册的脚本块的控件应该在 Control.Render 方法的重写中调用此方法。呈现服务器窗体元素的方式不同的页可以重写此方法以在不同的条件下引发异常。
      如果回发或使用客户端脚本的服务器控件没有包含在 HtmlForm 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 HtmlForm 控件中时提供明确的错误信息。
      开发自定义服务器控件时,通常在为任何类型的输入标记重写 Render 方法时调用该方法。这在输入控件调用 GetPostBackEventReference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。 没有这个方法,程序将报错。 
      

  3.   

    private void Button1_Click(object sender,System.EventAres e)

        string strHea="";  //表头名称
         
        //读入内存缓冲区
        StringWriter sw=new StringWriter();
       sw.WriteLine(strHead);
       sw.WriteLine("标题1\t标题2\t标题3\t标题4\t");
       
       //这里做一个循环,你要输出的数据有几行,就循环几次 dsTemp格式为DataSet
       foreach(DataRow dr in dsTemp.Table[0].Rows)
       {
            string strData1 = dr["字段名称1"];
            string strData1 = dr["字段名称2"];
            string strData1 = dr["字段名称3"];
            string strData1 = dr["字段名称4"];
          
            sw.WriteLine(strData1+"\t" + strData2 + "\t" + strData3+"\t" + strData4)
        }
         sw.close();
        Response.AddHeader("Content-Disposition","attachment;filename=ResultOutput.xls");//输出的文件
        Response.ContentType="application/ms-excel";
        Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
        Response.Write(sw);
        Response.End();
    }还需要添加一个Excel的引用,MS是Microsoft Excel 11.0 Object Library 不知道是不是,你试试看吧~
    这是在vs2003下写的
      

  4.   

    无法找到表 0。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 无法找到表 0。
      

  5.   

    楼主,怎么说呢?你看一下,运行这么一个简单的代码:        Response.AddHeader("Content-Disposition", "attachment; filename=xxx.xls");
            Response.ContentType = "application/ms-excel";
            Response.Write("<table><tr><td>asdf</td></tr></table>");
    它就能输出一个excel文件.就知道了,在页头加上那两句, 原来的页面不变,只输出一个dagagrid ,它就会原样生成excel.
      

  6.   

    C# code protected void Button1_Click( object sender, System.EventArgs e )
      {
        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "GB2312";
        Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
        // 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
        Response.ContentEncoding = System.Text.Encoding.UTF7;
        Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
        System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
        this.GridView1.RenderControl(oHtmlTextWriter);
        Response.Output.Write(oStringWriter.ToString());
        Response.Flush();
        Response.End();  }
      public override void VerifyRenderingInServerForm( Control control )
      { }
      

  7.   

    无法找到表0的原因应该是你没有定义或初始化dsTemp这个变量吧!!!
    dsTemp就是你的DataGrid的数据源
      

  8.   

    你把循环去掉,能否输出一个Excel呢?
    只带表头和一行标题的!