Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将gridview转换为excel?_C#_Asp.net_Excel_Gridview_Content Type - Fatal编程技术网

C# 如何将gridview转换为excel?

C# 如何将gridview转换为excel?,c#,asp.net,excel,gridview,content-type,C#,Asp.net,Excel,Gridview,Content Type,我试图将gridview转换为excel.xls,但它会引发错误,当我单击“确定”时,它会转换,但整个页面显示在excel中。 我尝试了所有可能的内容类型,我有excel 2010 错误: 您试图转换的文件的格式与文件扩展名指定的格式不同 代码: protectedvoid btnTransactionDetails\u单击(对象发送方,事件参数e) { 尝试 { LabelResult.Text=“”; //GetReport(); int BusID=Convert.ToInt32(drop

我试图将gridview转换为excel
.xls
,但它会引发错误,当我单击“确定”时,它会转换,但整个页面显示在excel中。 我尝试了所有可能的内容类型,我有excel 2010

错误:

您试图转换的文件的格式与文件扩展名指定的格式不同

代码:

protectedvoid btnTransactionDetails\u单击(对象发送方,事件参数e)
{
尝试
{
LabelResult.Text=“”;
//GetReport();
int BusID=Convert.ToInt32(dropdownlistbus.SelectedValue);
int AccountID=Convert.ToInt32(DropDownList1.SelectedValue);
DateTime FromDate=Convert.ToDateTime(FromDateTextBox.Text);
DateTime ToDate=Convert.ToDateTime(ToDateTextBox.Text);
DataTable dt=新的DataTable();
dt=活动.GetLedger(AccountID、BusID、FromDate、ToDate);
GridViewLedger.DataSource=dt;
GridViewLedger.DataBind();
视图状态[“分类账”]=dt;
}
捕获(例外情况除外)
{
LabelResult.Text=例如消息;
}
}
受保护的void btnExportToExcel\u单击(对象发送方,事件参数e)
{
尝试
{
Response.Clear();
Response.AddHeader(“内容处置”、“附件;文件名=账本报告”+FromDateTextBox.Text+”到“+ToDateTextBox.Text+”.xls”);
Response.ContentType=“application/vnd.xlsx”;
System.IO.StringWriter stringWrite=新的System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite=新的HtmlTextWriter(stringWrite);
编写(“报告日期:+FromDateTextBox.Text+”到“+FromDateTextBox.Text+”);
GridViewLedger.AllowPaging=false;
GridViewLedger.AllowSorting=false;
//出席人数();
GridViewLedger.DataSource=(数据集)ViewState[“分类账”];
GridViewLedger.DataBind();
对于(int i=0;i更改此行

(数据集)视图状态[“分类账”];到(数据表)视图状态[“分类账”];

您正在尝试将DataTable类型转换为DataSet 您将得到以下异常

无法将“System.Data.DataTable”类型的对象强制转换为“System.Data.DataSet”类型。

因为ViewState[“分类账”]包含数据表(您已将数据表分配给它)


我已经创建了一个与您的代码完全相同的示例项目。它对我来说工作正常,请检查

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable table = new DataTable();
            table.Columns.Add("Dosage", typeof(int));
            table.Columns.Add("Drug", typeof(string));
            table.Columns.Add("Patient", typeof(string));
            table.Columns.Add("Date", typeof(DateTime));

            // Here we add five DataRows.
            table.Rows.Add(25, "Indocin", "David", DateTime.Now);
            table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
            table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
            table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
            table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
            GridView1.DataSource = table;
            GridView1.DataBind();
            ViewState["Ledger"] = table;
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=LedgerReport.xls");
        Response.ContentType = "application/vnd.xls";
        System.IO.StringWriter stringWrite = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

        htmlWrite.Write("<table><tr><td colspan='4'><center>Report Date </center></td></tr></table>");
        GridView1.AllowPaging = false;
        GridView1.AllowSorting = false;
        GridView1.DataSource = (DataTable)ViewState["Ledger"];
        GridView1.DataBind();
        for (int i = 0; i <= GridView1.Columns.Count - 1; i++)
        {
            GridView1.HeaderRow.Cells[i].Style.Add("background-color", "#2FA4E7");
            GridView1.HeaderRow.Cells[i].Style.Add("color", "#FFFFFF");

        }

        GridView1.RenderControl(htmlWrite);
        string style = @"<style> .textmode { mso-number-format:\@; } </style>";
        Response.Write(style);
        Response.Write(stringWrite.ToString());
        Response.End();
    }
    public override void VerifyRenderingInServerForm(Control control)
    {
        /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
           server control at run time. */
    }
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
DataTable=新的DataTable();
表.列.添加(“剂量”,类型(int));
表.列.添加(“药物”,类型(字符串));
表.列.添加(“患者”,类型(字符串));
表.列.添加(“日期”,类型(日期时间));
//这里我们添加五个数据行。
表.Rows.Add(25,“Indocin”,“David”,DateTime.Now);
添加(50,“Enebrel”,“Sam”,DateTime.Now);
表.Rows.Add(10,“Hydrazine”,“Christoff”,DateTime.Now);
添加(21,“Combivent”,“Janet”,DateTime.Now);
表.行.添加(100,“迪兰丁”,“梅勒妮”,日期时间.现在);
GridView1.DataSource=表格;
GridView1.DataBind();
ViewState[“分类账”]=表格;
}
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
Response.Clear();
AddHeader(“内容处置”、“附件;文件名=LedgerReport.xls”);
Response.ContentType=“application/vnd.xls”;
System.IO.StringWriter stringWrite=新的System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite=新的HtmlTextWriter(stringWrite);
htmlWrite.Write(“报告日期”);
GridView1.AllowPaging=false;
GridView1.AllowSorting=false;
GridView1.DataSource=(DataTable)ViewState[“分类账”];
GridView1.DataBind();

对于(int i=0;我从数据集绑定gridview,然后在google数据集中搜索到Excel。选中此链接将数据表导出到Excel您可以尝试使用保存在ViewState[“Ledger”]=dt中的数据表;(因为您已经将数据表保存在ViewState中)请仔细检查一下,使用.xlsx如何?因为您使用的是excel 2010,所以您正在保存一个扩展名为xls的html文件。它不是一个真正的xls文件,基本上是一个二进制文件。您需要一个excel库来保存真正的excel文件。将文件扩展名更改为如下(.xls到.xlsx)Response.AddHeader(“内容处置”,“附件;文件名=账本报告”+从DateTextBox.Text+“到“+ToDateTextBox.Text+”.xlsx”)
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable table = new DataTable();
            table.Columns.Add("Dosage", typeof(int));
            table.Columns.Add("Drug", typeof(string));
            table.Columns.Add("Patient", typeof(string));
            table.Columns.Add("Date", typeof(DateTime));

            // Here we add five DataRows.
            table.Rows.Add(25, "Indocin", "David", DateTime.Now);
            table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
            table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
            table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
            table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
            GridView1.DataSource = table;
            GridView1.DataBind();
            ViewState["Ledger"] = table;
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=LedgerReport.xls");
        Response.ContentType = "application/vnd.xls";
        System.IO.StringWriter stringWrite = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

        htmlWrite.Write("<table><tr><td colspan='4'><center>Report Date </center></td></tr></table>");
        GridView1.AllowPaging = false;
        GridView1.AllowSorting = false;
        GridView1.DataSource = (DataTable)ViewState["Ledger"];
        GridView1.DataBind();
        for (int i = 0; i <= GridView1.Columns.Count - 1; i++)
        {
            GridView1.HeaderRow.Cells[i].Style.Add("background-color", "#2FA4E7");
            GridView1.HeaderRow.Cells[i].Style.Add("color", "#FFFFFF");

        }

        GridView1.RenderControl(htmlWrite);
        string style = @"<style> .textmode { mso-number-format:\@; } </style>";
        Response.Write(style);
        Response.Write(stringWrite.ToString());
        Response.End();
    }
    public override void VerifyRenderingInServerForm(Control control)
    {
        /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
           server control at run time. */
    }