首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在asp.net中将数据从网格视图导出到Excel

在asp.net中将数据从网格视图导出到Excel
EN

Stack Overflow用户
提问于 2017-02-23 16:39:16
回答 1查看 919关注 0票数 1

在asp.net中将数据从网格视图导出到Excel时出错

Firebug显示错误是

“错误: Sys.WebForms.PageRequestManagerParserErrorException:无法分析从服务器收到的消息。此错误的常见原因是调用Response.Write()、响应筛选器、HttpModules或启用了服务器跟踪来修改响应。详细信息:分析时出错‘

我的代码是

代码语言:javascript
运行
复制
EditUser _editUser = new EditUser();
        string s = Request.QueryString["UserName"];
        DataTable _dsLeaveDetails1 = new DataTable();
        _dsLeaveDetails1 = _editUser.GetUserWiseECO(s.ToLower(), "Earned Comp Off");
        if (_dsLeaveDetails1.Rows.Count > 0)
        {
            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "MonthlyLeaveReport.xls"));
            Response.ContentType = "application/ms-excel";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);

            sample.AllowPaging = false;

            sample.DataSource = _dsLeaveDetails1;
            sample.DataBind();

            //Change the Header Row back to white color
            sample.HeaderRow.Style.Add("background-color", "#FFFFFF");
            //Applying stlye to gridview header cells
            for (int i = 0; i < sample.HeaderRow.Cells.Count; i++)
            {
                sample.HeaderRow.Cells[i].Style.Add("background-color", "#507CD1");
            }
            int j = 1;
            //This loop is used to apply stlye to cells based on particular row
            foreach (GridViewRow gvrow in sample.Rows)
            {
                gvrow.BackColor = Color.White;
                if (j <= sample.Rows.Count)
                {
                    if (j % 2 != 0)
                    {
                        for (int k = 0; k < gvrow.Cells.Count; k++)
                        {
                            gvrow.Cells[k].Style.Add("background-color", "#EFF3FB");
                        }
                    }
                }
                j++;
            }
            sample.RenderControl(htw);
            Response.Write(sw.ToString());
            Response.End();
        }
        else
        {
            ScriptManager.RegisterStartupScript(this, GetType(), "displayalertmessage", "alert('No records Found!!!');", true);
        }
EN

回答 1

Stack Overflow用户

发布于 2017-02-23 16:43:25

这是我正在使用的完整代码。

首先重写此方法:

代码语言:javascript
运行
复制
public override void VerifyRenderingInServerForm(Control control)
{
}

并使用此方法导出到Excel:

代码语言:javascript
运行
复制
private void ExportToExcel()
{
    Response.Clear();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", "attachment;filename=name.xls");
    Response.Charset = "utf-8";
    Response.ContentType = "application/vnd.ms-excel";
    using (StringWriter sw = new StringWriter())
    {
        HtmlTextWriter hw = new HtmlTextWriter(sw);

        //To Export all pages
        gridview.AllowPaging = false;

        gridview.HeaderRow.BackColor = Color.White;
        foreach (TableCell cell in gridview.HeaderRow.Cells)
        {
            cell.BackColor = Color.FromName("#4091A4");
            cell.ForeColor = Color.White;

            foreach (Control control in cell.Controls)
            {
                if ((control.GetType().Name == "DataControlLinkButton") ||
                     (control.GetType().Name == "DataControlLinkButton"))
                {
                    cell.Controls.Add(new Literal { Text = (control as LinkButton).Text });
                    cell.Controls.Remove(control);
                }
            }
        }
        foreach (GridViewRow row in gridview.Rows)
        {
            row.BackColor = Color.White;
            foreach (TableCell cell in row.Cells)
            {
                List<Control> controls = new List<Control>();

                foreach (Control control in cell.Controls)
                {
                    controls.Add(control);
                }

                cell.CssClass = "textmode";
                foreach (Control control in controls)
                {
                    switch (control.GetType().Name)
                    {
                        case "HyperLink":
                            cell.Controls.Add(new Literal { Text = (control as HyperLink).Text });
                            break;
                        case "TextBox":
                            cell.Controls.Add(new Literal { Text = (control as TextBox).Text });
                            break;
                        case "DataControlLinkButton":
                        case "LinkButton":
                            cell.Controls.Add(new Literal { Text = (control as LinkButton).Text });
                            break;
                        case "CheckBox":
                            cell.Controls.Add(new Literal { Text = (control as CheckBox).Text });
                            break;
                        case "RadioButton":
                            cell.Controls.Add(new Literal { Text = (control as RadioButton).Text });
                            break;
                    }
                    cell.Controls.Remove(control);
                }

                if (row.RowIndex % 2 == 0)
                {
                    cell.BackColor = gridview.AlternatingRowStyle.BackColor;
                }
                else
                {
                    cell.BackColor = gridview.RowStyle.BackColor;
                }
                cell.HorizontalAlign = HorizontalAlign.Center;
            }
        }

        gridview.RenderControl(hw);

        //style to format numbers to string
        string style = @"<style> .textmode { } </style>";
        Response.Write(style);
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42410709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档