Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9151792
  • 博文数量: 1727
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19860
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1727)

文章存档

2024年(3)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: WINDOWS

2010-07-07 15:27:31

Default.aspx :

 

<asp:SqlDataSource ID="sqldsCustomers" runat="server" SelectCommand="select * from UserDetails"
    SelectCommandType="Text" ConnectionString="server=server;database=LegalWindow;Trusted_Connection=yes;" />
<asp:GridView ID="gvCustomers" runat="server" AllowPaging="true" AllowSorting="true"
    PageSize="10″" DataSourceID="sqldsCustomers" GridLines="Both" />
<asp:Button ID="btnExportGrid" runat="server" Text="Export to Excel" OnClick="BtnExportGrid_Click" />


Default.aspx.cs :

 

protected void BtnExportGrid_Click(object sender, EventArgs args)
{
// pass the grid that for exporting …

GridViewExportUtil.Export(“Customers.xls”, this.gvCustomers);
}

 

GridViewExportUtil.cs


 

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

    //Export Gridview Data to Excel File and Save Excel file to Server Folder Rather than

   //allowing user to Open or Save it.

   public static void ExportToFolder(string fileName, GridView gv)
   {

       System.Text.StringBuilder sb = new System.Text.StringBuilder();

       using (StringWriter sw = new StringWriter(sb))
       {
           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);

               //Create file

               System.IO.TextWriter w = new System.IO.StreamWriter(HttpContext.Current.Server.MapPath("~") + "\\" + fileName);
               w.Write(sb.ToString());
               w.Flush();
               w.Close();

           }
       }
   }

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

For the case where I actually wanted all rows exported, I turned off paging and rebound the grid before sending the control to the export utility.  For exporting just the first 100 rows, I set the PageSize property to 100 and then rebound.  You should probably use care when exporting the complete GridView just in case your grid has a few more rows that you are expecting.  Here is the code for the export button click handler


 

protected void BtnExportGrid_Click(object sender, EventArgs args)
    {
        if (this.rdoBtnListExportOptions.SelectedIndex == 1)
        {
            // the user wants all rows exported, turn off paging

            // and rebing the grid before sending it to the export

            // utility

            this.gvCustomers.AllowPaging = false;
            this.gvCustomers.DataBind();
        }
        else if (this.rdoBtnListExportOptions.SelectedIndex == 2)
        {
            // the user wants just the first 100,

            // adjust the PageSize and rebind

            this.gvCustomers.PageSize = 100;
            this.gvCustomers.DataBind();
        }

        // pass the grid that for exporting …

        GridViewExportUtil.Export("Customers.xls", this.gvCustomers);
    }


阅读(1726) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~