我有一个GridView显示数据库中的字段和一个将此GridView导出到Excel电子表格的函数,但唯一没有显示的列是litChecklistNo。
<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><!--table@page{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的其余部分中使用BoundField,但为什么不将它导出到Spreed表?这与Literal有关吗?
答案 0 :(得分:0)
看看我的帖子。我也无法从gridview导出到Excel。然而,我使用母版页使用此母版页从页面导出。
点击此链接。请注意,这是VB.net,因此您只需将此代码转换为C#。
Exporting Gridview to Excel Vb.net
希望这有帮助。