想将DataGrid中的数据 导出到excel中去
在网上“抄”了一段代码:
private viod DataGrid2Excel()
{
System.IO.StringWriter SW = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter HTW=new System.Web.UI.HtmlTextWriter(SW);
dgShow.RenderControl(HTW);//dgShow为显示数据的DataGrid
Response.Buffer=true;
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/vnd.ms-excel";
Response.Charset="utf-8";
Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");
Response.AddHeader("Content-Disposition", "attachment;filename=test.doc");
Response.Write(SW.ToString());
Response.Flush();
Response.Close();

但每次调用 DataGrid2Excel()的时候 形成的excel表都是 空表 什么数据都没 有 ???
请大家多多帮忙,高手们多多帮助啊 给指点指点 谢谢!
  

解决方案 »

  1.   

    下面的dg就是要导出的datagrid 
     Response.AppendHeader("Content-Disposition","attachment;filename="+Server.UrlEncode("要导出以后的文件名.xls"));   
      Response.ContentType = "application/vnd.ms-excel";   
      Response.Charset ="utf8";   
      Response.ContentEncoding =System.Text.Encoding.UTF8         ;   
      dg.Page.EnableViewState=false;   
      System.IO.StringWriter tw = new System.IO.StringWriter()   ;   
      System.Web.UI.HtmlTextWriter hw = new   System.Web.UI.HtmlTextWriter(tw);   
      dg.Visible=true;   
      dg.RenderControl(hw);   
      Response.Write(tw.ToString());   
      Response.End();
      

  2.   

    你要先绑定这饿datagrid ,或者你在执行这个导出的时候.判断datagrid是否为空,如果为空,那就是绑定的数据已经失效.需要重新绑定下datagrid
      

  3.   

    coolwtj() 提供的代码很好用,倒出来了,谢谢,但是导出以后 页面上的按钮 都不灵了,就得从新 点连接 回到原来的初始页面再从新查数据 ??。
      

  4.   

    给你一个DataGrid的代码: 
    // 导出列表信息到Excel 
    public static void gSendGridInfoToExcel(DataGrid GridX) 

    Excel.Application excel= new Excel.ApplicationClass(); 
    Excel._Workbook xBk = excel.Workbooks.Add(true); 
    Excel._Worksheet xSt = (Excel._Worksheet)xBk.ActiveSheet; 
    Excel.Range excelCell=null; 
    try 

    //赋值对象 
    object[] objarr; 
    DataTable dtTest=new DataTable();; 
    int i,j; 
    int iRows,iCows; 
    int iVisable; 
    iVisable=0; 
    iCows=0; 
    ArrayList list=new ArrayList(); 
    //如果绑定数据源是DataTable和DataSet,取得行数 
    if (GridX.DataSource is System.Data.DataSet || GridX.DataSource is System.Data.DataTable) 

    dtTest=(DataTable)GridX.DataSource; 
    iRows=dtTest.Rows.Count; 

    else if (GridX.DataSource is System.Data.DataView) 

    DataView dvTest=(DataView)GridX.DataSource; 
    iRows=dvTest.Count; 
    dtTest=dvTest.Table; 

    //如果是集合取得行数 
    else 

    System.Collections.CollectionBase ColTest; 
    ColTest=(System.Collections.CollectionBase)GridX.DataSource; 
    iRows=ColTest.Count; 

    //如果有TableStyles则根据TableStyles取得(标题行) 
    if (GridX.TableStyles.Count>0) 

    iCows=GridX.TableStyles[0].GridColumnStyles.Count; 
    for(i=0;i<iCows;i++) 

    if(GridX.TableStyles[0].GridColumnStyles[i].Width>0) 

    iVisable++; 
    list.Add(GridX.TableStyles[0].GridColumnStyles[i].HeaderText); 
    } } 
    objarr = new object[iVisable]; 
    objarr=list.ToArray(); 
    excelCell = xSt.get_Range(excel.Cells[1,1],excel.Cells[1,iVisable]); 
    excelCell.Value2 = objarr; 
    //数据行 
    for(i=0;i<iRows;i++) 

    objarr = new object[iVisable]; 
    list.Clear(); for(j=0;j<iCows;j++) 

    if(GridX.TableStyles[0].GridColumnStyles[j].Width>0) 

    list.Add("'"+GridX[i,j].ToString().Replace("\n","")); 
    } } 
    if (list.Equals(System.DBNull.Value)) 

    break; 

    objarr=list.ToArray(); 
    excelCell = xSt.get_Range(excel.Cells[i+2,1],excel.Cells[i+2,iVisable]); 
    excelCell.Value2 = objarr; 


    else 

    iCows=dtTest.Columns.Count; 
    for(i=0;i<iCows;i++) 

    list.Add(dtTest.Columns[i].Caption); 

    objarr = new object[iCows]; 
    objarr=list.ToArray(); 
    excelCell = xSt.get_Range(excel.Cells[1,1],excel.Cells[1,iCows]); 
    excelCell.Value2 = objarr; //数据行 
    for(i=0;i<iRows;i++) 

    objarr = new object[iCows]; 
    list.Clear(); for(j=0;j<iCows;j++) 

    list.Add("'"+GridX[i,j].ToString().Replace("\n","")); 

    if (list.Equals(System.DBNull.Value)) 

    break; 

    objarr=list.ToArray(); 
    excelCell = xSt.get_Range(excel.Cells[i+2,1],excel.Cells[i+2,iCows]); 
    excelCell.Value2 = objarr; 
    } } 
    dtTest.Dispose(); excel.Visible=true; } 
    catch (System.Exception e) 

    throw e; 

    finally 

    excelCell=null; 
    xBk=null; 
    xSt=null; 
    excel=null; 
    GC.Collect(); 
    } } }