2015-06-25 36 views
0

我有一个GridView显示来自数据库的字段以及一个将此GridView导出到Excel电子表格的函数,但唯一不显示的列是litChecklistNo。GridView中的一列不会导出为Excel表格

<asp:GridView runat="server" 
          <Columns> 
            <asp:BoundField DataField="VehicleReg" HeaderText="Registration" SortExpression="VehicleReg"></asp:BoundField> 
            <asp:TemplateField HeaderText="Checklist Number" SortExpression="CheckListNo"> 
             <ItemTemplate> 
              <asp:Literal ID="litChecklistNo" runat="server"> </asp:Literal> 
             </ItemTemplate> 
            </asp:TemplateField> 
            <asp:BoundField DataField="ChecklistDate" HeaderText="Checklist Date" SortExpression="ChecklistDate" dataformatstring="{0:dd/MM/yyyy}"></asp:BoundField> 
            <asp:BoundField DataField="MaintenanceNo" HeaderText="Maintenance No" SortExpression="MaintenanceNo"></asp:BoundField>  
           </Columns> 
         </asp:GridView> 

导出GridView控件的代码:

protected void ToExcel(GridView grid, string Name, string FileName) 
    { 
     if (!FileName.Contains(".xls")) 
     { 
      FileName = FileName + ".xls"; 
     } 
     string style = "<style><!--tabl[email protected]{mso-header-data:\"&C" + Name + " Date/: &D/ Page &P\"; mso-page-orientation:landscape; mso-page-scale:89;}  br  {mso-data-placement:same-cell;} --></style>"; 

     Response.Buffer = true; 
     Response.ContentType = "application/vnd.ms-excel"; 
     Response.AddHeader("content-disposition", "attachment; filename=" + FileName + ""); 
     this.EnableViewState = false; 
     Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">"); 
     Response.Write("<head>"); 
     Response.Write(style); 
     Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=windows-1252\">"); 
     Response.Write("<!--[if gte mso 9]>"); 
     Response.Write("<xml>"); 
     Response.Write("<x:ExcelWorkbook>"); 
     Response.Write("<x:ExcelWorksheets>"); 
     Response.Write("<x:ExcelWorksheet>"); 
     Response.Write("<x:Name>" + Name + " Table</x:Name>"); 
     Response.Write("<x:WorksheetOptions>"); 
     Response.Write("<x:Panes>"); 
     Response.Write("</x:Panes>"); 
     Response.Write("<x:Print>"); 
     Response.Write("<x:ValidPrinterInfo/>"); 
     Response.Write("<x:Scale>89</x:Scale>"); 
     Response.Write("</x:Print>"); 
     Response.Write("</x:WorksheetOptions>"); 
     Response.Write("</x:ExcelWorksheet>"); 
     Response.Write("</x:ExcelWorksheets>"); 
     Response.Write("</x:ExcelWorkbook>"); 
     Response.Write("</xml>"); 
     Response.Write("<![endif]-->"); 
     Response.Write("</head>"); 
     Response.Write("<body>"); 

     System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); 

     ClearControls(grid); 

     grid.RenderBeginTag(oHtmlTextWriter); 
     grid.HeaderRow.RenderControl(oHtmlTextWriter); 
     foreach (GridViewRow row in grid.Rows) 
     { 
      row.RenderControl(oHtmlTextWriter); 
     } 
     grid.FooterRow.RenderControl(oHtmlTextWriter); 
     grid.RenderEndTag(oHtmlTextWriter); 

     Response.Write(oStringWriter.ToString()); 


     Response.Write("</body>"); 
     Response.Write("</html>"); 
     Response.End(); 

    } 

litChecklistNo是在GridView的链接,打开点击,这样,当另一页就是为什么我不是的剩下的使用绑定列像GridView,但为什么它不被导出到Spreed表单?这与Literal有关吗?

+0

为什么不使用支持正确生成'.xlsx'文件的库,如[EPPlus](http://epplus.codeplex.com/),[NPOI ](http://npoi.codeplex.com/)或[Open XML SDK](https://msdn.microsoft.com/en-us/library/office/bb448854.aspx)?我描述了如何在[我的博客]上使用EPPlus(https://masonmcg.com/blog/entry/properly-generating-excel-files-in-net)。 – mason

+0

@mason现在我会继续使用这段代码。你有什么想法可能是什么问题? – beginner91

回答

0

看看我的文章。我也很难从我的gridview导出到Excel。然而,我正在使用主页面从使用此主页面的页面导出。

关注此链接。请注意,这是VB.net,因此您可以将此代码转换为C#。

Exporting Gridview to Excel Vb.net

希望这有助于。