GridView中的一列不会导出到Excel工作表

时间:2015-06-25 15:43:27

标签: c# asp.net excel visual-studio gridview

我有一个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有关吗?

1 个答案:

答案 0 :(得分:0)

看看我的帖子。我也无法从gridview导出到Excel。然而,我使用母版页使用此母版页从页面导出。

点击此链接。请注意,这是VB.net,因此您只需将此代码转换为C#。

Exporting Gridview to Excel Vb.net

希望这有帮助。