c# - 将 GridView 导出到 excel #2

标签 c# asp.net excel gridview export

我将 GridView 绑定(bind)到 sqldatasource,然后在 _rowcreated 事件上进行一些验证,当行不满足要求时,我使用 e.Row.Visible = false; 隐藏它

这工作正常,只在 gridview 中显示正确的行。现在我有一个按钮可以导出到 excel,除了导出隐藏的行之外,它的效果很好。我不想导出隐藏的行。

有没有办法告诉gridview不要添加该行而不是隐藏它?
在我运行导出之前,有没有一种简单的方法可以删除所有隐藏的行?
我可以在导出期间不添加隐藏行吗?正如您在下面的代码中看到的那样,我尝试执行此操作,但它无法识别该行是否可见。

导出代码:

 public static void Export(string fileName, GridView gv)
{
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.AddHeader(
        "content-disposition", string.Format("attachment; filename={0}", fileName));
    HttpContext.Current.Response.ContentType = "application/ms-excel";

    using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter htw = new HtmlTextWriter(sw))
        {
            //  Create a form to contain the grid
            Table table = new Table();

            gv.GridLines = GridLines.Both;
            table.GridLines = gv.GridLines;
            //table.BackColor = Color.Yellow;



            //  add the header row to the table
            if (gv.HeaderRow != null)
            {
                GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                table.Rows.Add(gv.HeaderRow);

                //color the header
                table.Rows[0].BackColor = gv.HeaderStyle.BackColor;
                table.Rows[0].ForeColor = gv.HeaderStyle.ForeColor;
            }

            //  add each of the data rows to the table
            foreach (GridViewRow row in gv.Rows)
            {

                if (row.Visible == true)
                {
                    GridViewExportUtil.PrepareControlForExport(row);
                    table.Rows.Add(row);
                }
            }

            //  color the rows
            bool altColor = false;
            for (int i = 1; i < table.Rows.Count; i++)
            {
                if (!altColor)
                {
                    table.Rows[i].BackColor = gv.RowStyle.BackColor;
                    altColor = true;
                }
                else
                {
                    table.Rows[i].BackColor = gv.AlternatingRowStyle.BackColor;
                    altColor = false;
                }
            }

            //  render the table into the htmlwriter
            table.RenderControl(htw);

            //  render the htmlwriter into the response
            HttpContext.Current.Response.Write(sw.ToString());
            HttpContext.Current.Response.End();
        }
    }
}

最佳答案

http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html

我从未使用过 GridViewExportUtil,但为什么不编辑他的代码呢?

private static void PrepareControlForExport(Control control)
{
    for (int i = 0; i < control.Controls.Count; i++)
    {
        Control current = control.Controls[i];

        //-----------------------------
        // * my addition
        if (!current.Visible) continue;
        //-----------------------------

        if (current is LinkButton)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
        }
        else if (current is ImageButton)
        {
            //...

关于c# - 将 GridView 导出到 excel #2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7943841/

相关文章:

c# - VS 2010 中 C# 项目的意外缓慢构建

VBA求和如果有多个条件

java - 将 Eclipse NAT 表导出到 CSV/Excel

c# - 如何遍历 PDFSharp 中的 Pdf 对象树?

c# - 使用 C# 和 OAuth 从 Twitter 获取用户的电子邮件地址

c# - .NET MVC Razor 动态表单生成

c# - 单击在 asp :Repeater 中呈现的 ascx 控件中的按钮时丢失值

c# - 如何防止在文本框上按 Enter 键时重定向到另一个 aspx 页面?

excel - 一元加运算符在 Excel 公式中起什么作用?

c# - 如何修改Expression<Func<???, bool>>的类型参数?