如何实现把DataGrid控件表中的数据自动导出到excel里呢?
请高手指点,谢谢

解决方案 »

  1.   

    public static void ToExcel(System.Web.UI.Control ctl,string FileName)
            {
                HttpContext.Current.Response.Charset ="UTF-8";
                HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;
                HttpContext.Current.Response.ContentType ="application/ms-excel";
                HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename="+""+FileName+".xls");
                ctl.Page.EnableViewState =false;
                System.IO.StringWriter  tw = new System.IO.StringWriter();
                System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
                ctl.RenderControl(hw);
                HttpContext.Current.Response.Write(tw.ToString());
                HttpContext.Current.Response.End();
            }
      

  2.   

    private void print_ServerClick(object sender, System.EventArgs e)   //导出按钮的代码
    {
    Response.Clear(); 
    Response.Buffer= true; 
    Response.Charset="utf-8";    
    Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls"); 
    Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");//设置输出流为简体中文
    Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
    this.EnableViewState = false;    
    System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true);
    System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad); 
    System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
    this.DataGrid_bz.RenderControl(oHtmlTextWriter);   //在此修改DataGrid_bz为你的控件名就可以了.
    Response.Write(oStringWriter.ToString());
    Response.End();
    }
      

  3.   

    fengfang20012005() : 你这段程序好像有问题,
      

  4.   

    搂住! datagrid数据导出excel文件,有时出现乱码 不要用UTF-8 ! 会出现乱码,  应该用UTF-7!!!!!!!!!!!!!!!!!! 结决乱吗问题!不过以下代码也不错!
    把DataGrid导出成Excel或者Word文档 
     private void Export(System.Web.UI.WebControls.DataGrid dg,string fileName,string typeName)
     {
     
     System.Web.HttpResponse httpResponse = Page.Response;
     httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)); 
     httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
     httpResponse.ContentType = typeName;
     System.IO.StringWriter  tw = new System.IO.StringWriter() ;
     System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
    dg.RenderControl(hw);
    string filePath = Server.MapPath("..")+fileName;
    System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);
    sw.Write(tw.ToString());
    sw.Close();DownFile(httpResponse,fileName,filePath);
    httpResponse.End();
    }private  bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath)
    {
    try
    {
    Response.ContentType = "application/octet-stream";Response.AppendHeader("Content-Disposition","attachment;filename=" + 
    HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + ";charset=GB2312");
    System.IO.FileStream fs= System.IO.File.OpenRead(fullPath);
    long fLen=fs.Length;
    int size=102400;//每100K同时下载数据 
    byte[] readData = new byte[size];//指定缓冲区的大小 
    if(size>fLen)size=Convert.ToInt32(fLen);
    long fPos=0;
    bool isEnd=false;
    while (!isEnd) 

    if((fPos+size)>fLen)
    {
    size=Convert.ToInt32(fLen-fPos);
    readData = new byte[size];
    isEnd=true;
    }
    fs.Read(readData, 0, size);//读入一个压缩块 
    Response.BinaryWrite(readData);
    fPos+=size;

    fs.Close(); 
    System.IO.File.Delete(fullPath);
    return true;
    }
    catch
    {
    return false;
    }
    }
    private void btnWord_Click(object sender, System.EventArgs e)
    {
    Export(dataGrid,"FileName.doc","application/ms-word");}private void btnExcel_Click(object sender, System.EventArgs e)
    {
    Export(dataGrid,"FileName.xls","application/ms-excel");
    }
      

  5.   

    zhangzengping() : 你这段程序在哪里调用?
      

  6.   

    zhangzengping() :出现一下错误:“/ManageSystem”应用程序中的服务器错误。
    --------------------------------------------------------------------------------类型“DataGridLinkButton”的控件“DataGrid__ctl14__ctl1”必须放在具有 runat=server 的窗体标记内。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 类型“DataGridLinkButton”的控件“DataGrid__ctl14__ctl1”必须放在具有 runat=server 的窗体标记内。源错误: 
    行 92:  System.IO.StringWriter  tw = new System.IO.StringWriter() ;
    行 93:  System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
    行 94:  dg.RenderControl(hw);
    行 95:  string filePath = Server.MapPath("..")+fileName;
    行 96:  System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);
     源文件: c:\inetpub\wwwroot\managesystem\managesystem.aspx.cs    行: 94 堆栈跟踪: 
    [HttpException (0x80004005): 类型“DataGridLinkButton”的控件“DataGrid__ctl14__ctl1”必须放在具有 runat=server 的窗体标记内。]
       System.Web.UI.Page.VerifyRenderingInServerForm(Control control)
       System.Web.UI.WebControls.LinkButton.AddAttributesToRender(HtmlTextWriter writer)
       System.Web.UI.WebControls.WebControl.RenderBeginTag(HtmlTextWriter writer)
       System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)
       System.Web.UI.WebControls.DataGridLinkButton.Render(HtmlTextWriter writer)
       System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
       System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
       System.Web.UI.Control.Render(HtmlTextWriter writer)
       System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)
       System.Web.UI.WebControls.TableCell.RenderContents(HtmlTextWriter writer)
       System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)
       System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
       System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
       System.Web.UI.Control.Render(HtmlTextWriter writer)
       System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)
       System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)
       System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
       System.Web.UI.WebControls.Table.RenderContents(HtmlTextWriter writer)
       System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)
       System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
       System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
       System.Web.UI.Control.Render(HtmlTextWriter writer)
       System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)
       System.Web.UI.WebControls.BaseDataList.Render(HtmlTextWriter writer)
       System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
       ManageSystem.Index.Export(DataGrid dg, String fileName, String typeName) in c:\inetpub\wwwroot\managesystem\managesystem.aspx.cs:94
       ManageSystem.Index.Button1_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\managesystem\managesystem.aspx.cs:83
       System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       System.Web.UI.Page.ProcessRequestMain()
      

  7.   

    还要注意一个问题是:Datagrid中不能使用任何格式,否则到出来就有问题,我上次做的时候就遇到过.
      

  8.   

    Exporting DataGrid to Excel, Word and Text Files
    By azamsharp. http://www.codeproject.com/aspnet/DAtaGridExportToExcel.asp
      

  9.   

    zhangzengping() :你好!
    你发的那段把DataGrid里的记录导出到excle的代码里:导出到excel里的记录一行太窄,怎样设置行的高度呢?谢谢!
      

  10.   

    private void btnExcel_Click(object sender, System.EventArgs e)
    {
    Export(dataGrid,"FileName.xls","application/ms-excel");
    }
    如果用这种方法是不是需要先自己设置一个excel表
      

  11.   

    我是LZ,
    从DataGrid导出到Excel的数据列中是不是不能有按钮列啊,我一加按钮列就发生错误;如果不能有按钮列,那么用什么来实现选择一行记录的功能,谢谢!
    下面是我的代码:
     private void Export(System.Web.UI.WebControls.DataGrid dg,string fileName,string typeName)
     {
     
     System.Web.HttpResponse httpResponse = Page.Response;
     httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)); 
     httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
     httpResponse.ContentType = typeName;
     System.IO.StringWriter  tw = new System.IO.StringWriter() ;
     System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
    dg.RenderControl(hw);
    string filePath = Server.MapPath("..")+fileName;
    System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);
    sw.Write(tw.ToString());
    sw.Close();DownFile(httpResponse,fileName,filePath);
    httpResponse.End();
    }private  bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath)
    {
    try
    {
    Response.ContentType = "application/octet-stream";Response.AppendHeader("Content-Disposition","attachment;filename=" + 
    HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + ";charset=GB2312");
    System.IO.FileStream fs= System.IO.File.OpenRead(fullPath);
    long fLen=fs.Length;
    int size=102400;//每100K同时下载数据 
    byte[] readData = new byte[size];//指定缓冲区的大小 
    if(size>fLen)size=Convert.ToInt32(fLen);
    long fPos=0;
    bool isEnd=false;
    while (!isEnd) 

    if((fPos+size)>fLen)
    {
    size=Convert.ToInt32(fLen-fPos);
    readData = new byte[size];
    isEnd=true;
    }
    fs.Read(readData, 0, size);//读入一个压缩块 
    Response.BinaryWrite(readData);
    fPos+=size;

    fs.Close(); 
    System.IO.File.Delete(fullPath);
    return true;
    }
    catch
    {
    return false;
    }
    }
    private void btnWord_Click(object sender, System.EventArgs e)
    {
    Export(dataGrid,"FileName.doc","application/ms-word");}private void btnExcel_Click(object sender, System.EventArgs e)
    {
    Export(dataGrid,"FileName.xls","application/ms-excel");
    }