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有关吗?
为什么不使用支持正确生成'.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
@mason现在我会继续使用这段代码。你有什么想法可能是什么问题? – beginner91