C# 导出到Excel而不导出Gridview内容

C# 导出到Excel而不导出Gridview内容,c#,asp.net,C#,Asp.net,我正在尝试将gridview内容导出到Excel,如下所示,Excel已创建,但没有内容。但我可以查看网页中的内容 using System; using System.IO; using System.Reflection; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Xml; using System.Data; using System.Web.UI; using Syste

我正在尝试将gridview内容导出到Excel,如下所示,Excel已创建,但没有内容。但我可以查看网页中的内容

using System;
using System.IO;
using System.Reflection;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Xml;
using System.Data;
using System.Web.UI;
using System.Web;

namespace CustomReports.Reports
{
public partial class Reports : System.Web.UI.Page
{
    DataTable ResultTable = new DataTable();        
    GridView ResultGrid = new GridView();

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public override void VerifyRenderingInServerForm(Control control) 
    {
     /* Verifies that the control is rendered */ 
}


    protected void Button1_Click(object sender, EventArgs e)
    {

        DataColumn col1 = new DataColumn("S.No");
        DataColumn col2 = new DataColumn("Workflow Name");
        DataColumn col3 = new DataColumn("Subject Name");
        DataColumn col4 = new DataColumn("Subject ID");

        col1.DataType = System.Type.GetType("System.Int32");
        col2.DataType = System.Type.GetType("System.String");
        col3.DataType = System.Type.GetType("System.String");
        col4.DataType = System.Type.GetType("System.String");

        ResultTable.Columns.Add(col1);
        ResultTable.Columns.Add(col2);
        ResultTable.Columns.Add(col3);
        ResultTable.Columns.Add(col4);

        CoreServiceSession client = new CoreServiceSession();
        SessionAwareCoreServiceClient csClient = client.GetClient();
        var readoption = new ReadOptions();

        ProcessesFilterData filter = new ProcessesFilterData()
        {
            BaseColumns = ListBaseColumns.IdAndTitle,
            ProcessType = ProcessType.Historical

        };

        int i = 1;
        foreach (IdentifiableObjectData data in csClient.GetSystemWideList(filter))
        {
            var processHistory = data as ProcessHistoryData;
            if (processHistory != null)
            {
                DataRow row = ResultTable.NewRow();
                row[col1] = i;
                row[col2] = processHistory.Title;
                foreach (var subjectdetails in processHistory.Subjects)
                {
                    row[col3] = subjectdetails.Title.ToString();
                    row[col4] = subjectdetails.IdRef.ToString();
                }
                ResultTable.Rows.Add(row);
            }
            i++;
        }

        //GridView ResultGrid = new GridView();
        ResultGrid.DataSource = ResultTable;
        ResultGrid.DataBind();
        Panel1.Controls.Add(ResultGrid);
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        ExporttoExcel(ResultGrid, "Reports");
    }


    protected void ExporttoExcel(GridView objGridView, string FileName)
    {
        string attachment = "attachment; filename=" + FileName + ".xls";
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.AddHeader("content-disposition", attachment);
        HttpContext.Current.Response.ContentType = "application/ms-excel";
        StringWriter objStringWriter = new StringWriter();
        HtmlTextWriter objHtmlTextWriter = new HtmlTextWriter(objStringWriter);
        objGridView.RenderControl(objHtmlTextWriter);
        HttpContext.Current.Response.Write(objStringWriter.ToString());
        HttpContext.Current.Response.End();


    }






}

}
Excel未从gridview导入内容,其为空

ASPX代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Reports.aspx.cs" Inherits="CustomReports.Reports.Reports" EnableEventValidation="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">    
<title>Custom Report Page</title>
</head>
<body>
 <form id="form1" runat="server">
     <div>
            <table id="table1" runat="server">
                <tr>
                    <td>
                        <asp:Label ID="CustomReports1" runat="server" Text="Custom Reports" 
                        Font-Bold="True"></asp:Label>
                    </td>
                </tr>

                <tr>
                    <td>
                        <asp:Label ID="SelectReportType2" runat="server" Text="Select Report Type"></asp:Label>
                    </td>

                    <td>
                        <asp:DropDownList ID="DDReportTypes" runat="server" Height="25px" Width="193px" onselectedindexchanged="DDReportTypes_SelectedIndexChanged" AutoPostBack = "true" ></asp:DropDownList>
                    </td>
                </tr>
            </table>


            <table id="dynamictable" runat="server">
            </table>  


            <table id="buttons">
                <tr>
                    <td> 
                        <asp:Button ID="Button1" runat="server" Text="Search" onclick="Button1_Click" />
                    </td>

                    <td> 
                        <asp:Button ID="Button2" runat="server" Text="Export" onclick="Button2_Click" />
                    </td>

                    <td> 
                        <asp:Button ID="Button3" runat="server" Text="GetValues" onclick="Button3_Click" />
                    </td>           
                </tr>
            </table>



            <asp:TextBox ID="TextBox0" runat="server" Height="28px" Width="355px"></asp:TextBox> 

            <asp:Panel ID="Panel1" runat="server">             
                  <asp:GridView ID="ResultGrid" runat="server">
                  </asp:GridView>           
            </asp:Panel>

    </div> 

</form>

</body>
</html>

自定义报告页

您不需要表单。只需渲染网格:

ResultGrid.RenderControl(htw);
但是,您需要添加这段代码,因为通常网格必须是一个表单

public override void VerifyRenderingInServerForm(Control control) 
{       
}

尝试使用此代码导出

    Response.Clear();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", "attachment;filename=fooreport.xls");
    Response.Charset = "";
    Response.ContentType = "application/ms-excel";
    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    lstEarningReport.RenderControl(htmlWrite);
    Response.Write("<table border='1' >  ");
    Response.Write(stringWrite.ToString());
    Response.Write("</table>");
    Response.End();
Response.Clear();
Response.Buffer=true;
AddHeader(“内容处置”、“附件;文件名=fooreport.xls”);
响应。Charset=“”;
Response.ContentType=“应用程序/ms excel”;
System.IO.StringWriter stringWrite=新的System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite=新的HtmlTextWriter(stringWrite);
l学习报告。渲染控制(htmlWrite);
回答。写(“”);
Response.Write(stringWrite.ToString());
回答。写(“”);
Response.End();

这是一个老问题,但当我遇到同样的问题时遇到了它<在我的案例中,代码>启用视图状态在gridview上设置为false。将其设置回true修复了该问题。在导出gridview之前,我还对其进行了数据绑定,并将其删除。

我收到了以下错误:“必须将类型为“gridview”的控件“ResultGrid”放置在runat=server的表单标记中。”
lsterningreport
是某个控件的名称..您应该用该控件名称替换您的控件名称…我猜它是
ResultGrid
…是的,我已经这样做了。并在我的代码隐藏中添加了公共覆盖void VerifyRenderingInServerForm(Control){return;}。并在page指令中设置EnableEventValidation=“false”。现在没有错误,但Excel中没有任何错误是的,我已经这样做了。并在我的代码隐藏中添加了公共覆盖void VerifyRenderingInServerForm(Control){return;}。并在page指令中设置EnableEventValidation=“false”。现在没有错误,但Excel中没有任何内容请检查ASPX代码,我也尝试在ASPX页中声明GridView,当我在Excel中声明GridView时。@@Amiram:我已在ASPX页中声明GridView控件,在codebehind中创建数据控件,并将其添加到gridview中。但您仍然有另一个同名的gridview。这怎么可能呢?请将您的代码编辑为可编译并显示相同行为的代码。