zoukankan      html  css  js  c++  java
  • 一个 GridView 导出到 Excel 的类(转)

    Code
    using System;
    using System.Data;
    using System.Configuration;
    using System.IO;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    public class GridViewExportUtil
    {
        
    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();

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

                    
    //  add each of the data rows to the table
                    foreach (GridViewRow row in gv.Rows)
                    {
                        GridViewExportUtil.PrepareControlForExport(row);
                        table.Rows.Add(row);
                    }

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

                    
    //  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();
                }
            }
        }

        
    /// <summary>
        
    /// Replace any of the contained controls with literals
        
    /// </summary>
        
    /// <param name="control"></param>
        private static void PrepareControlForExport(Control control)
        {
            
    for (int i = 0; i < control.Controls.Count; i++)
            {
                Control current 
    = control.Controls[i];
                
    if (current is LinkButton)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, 
    new LiteralControl((current as LinkButton).Text));
                }
                
    else if (current is ImageButton)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, 
    new LiteralControl((current as ImageButton).AlternateText));
                }
                
    else if (current is HyperLink)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, 
    new LiteralControl((current as HyperLink).Text));
                }
                
    else if (current is DropDownList)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, 
    new LiteralControl((current as DropDownList).SelectedItem.Text));
                }
                
    else if (current is CheckBox)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, 
    new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
                }

                
    if (current.HasControls())
                {
                    GridViewExportUtil.PrepareControlForExport(current);
                }
            }
        }
    }
  • 相关阅读:
    二分+RMQ/双端队列/尺取法 HDOJ 5289 Assignment
    思维题 HDOJ 5288 OO’s Sequence
    树形DP Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland
    最大流增广路(KM算法) HDOJ 1853 Cyclic Tour
    最大流增广路(KM算法) HDOJ 1533 Going Home
    最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
    Complete the Word CodeForces
    Gadgets for dollars and pounds CodeForces
    Vasya and Basketball CodeForces
    Carries SCU
  • 原文地址:https://www.cnblogs.com/jarod99/p/1348949.html
Copyright © 2011-2022 走看看