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;
namespace Unit
{
public class GridViewExportUtil
{
/// <summary>
/// 把 GridView 呈现的内容导出到 Excel
/// </summary>
/// <param name="fileName"></param>
/// <param name="gv"></param>
public static void Export( string fileName, GridView gv,HttpResponse pageResponse, string filepath)
{
pageResponse.Clear();
pageResponse.Charset = " UTF-8 " ;
pageResponse.Buffer = false ;
pageResponse.ClearHeaders();
pageResponse.ContentEncoding = System.Text.Encoding.UTF8;
pageResponse.HeaderEncoding = System.Text.Encoding.UTF8;
pageResponse.AddHeader( " content-disposition " , string .Format( " attachment; filename={0} " , fileName));
// pageResponse.ContentType = "application/ms-excel";
pageResponse.ContentType = " application/octet-stream " ;
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// Create a form to contain the grid
Table table = new Table();
table.Style.Add( " border-top " , " solid 1px #cdcdcd " );
table.Style.Add( " border-left " , " solid 1px #cdcdcd " );
// 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);
string date = System.DateTime.Now.ToString( " MMddyyyy " );
string outFileName = " ExportExcel_ " + date + fileName;
string comPath = " Export/ " + outFileName;
string path = filepath + " \\Export " ;
if (Directory.Exists(path) == false )
{
System.IO.Directory.CreateDirectory(path);
}
path = path + " \\ " + outFileName;
System.Text.Encoding encode = System.Text.Encoding.Unicode;
StreamWriter stream = new StreamWriter(path, false , encode);
stream.Write(sw.ToString());
stream.Close();
// stream.Write(sw);
/// / render the htmlwriter into the response
pageResponse.Write(sw.ToString());
pageResponse.End();
pageResponse.Flush();
pageResponse.Close();
}
}
}
/// <summary>
/// 把 GridView 呈现的内容导出到 Excel
/// </summary>
/// <param name="fileName"></param>
/// <param name="gv"></param>
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();
table.Style.Add( " border-top " , " solid 1px #cdcdcd " );
table.Style.Add( " border-left " , " solid 1px #cdcdcd " );
// 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>
/// 把 GridView 呈现的内容导出到 Excel
/// </summary>
/// <param name="fileName"></param>
/// <param name="gv"></param>
public static string GetExportFileName( string fileName, GridView gv, string filepath)
{
try
{
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// Create a form to contain the grid
Table table = new Table();
table.Style.Add( " border-top " , " solid 1px #cdcdcd " );
table.Style.Add( " border-left " , " solid 1px #cdcdcd " );
// 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);
string date = System.DateTime.Now.ToString( " MMddyyyy " );
string outFileName = " ExportExcel_ " + date + " _ " + DateTime.Now.Ticks.ToString() + " _ " + fileName;
string comPath = " Export/ " + outFileName;
string path = filepath + " \\Export " ;
if (Directory.Exists(path) == false )
{
System.IO.Directory.CreateDirectory(path);
}
path = path + " \\ " + outFileName;
System.Text.Encoding encode = System.Text.Encoding.Unicode;
StreamWriter stream = new StreamWriter(path, false , encode);
stream.Write(sw.ToString());
stream.Close();
return comPath;
}
}
}
catch (Exception e)
{
throw ;
}
}
/// <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 " ));
}
else if (current is System.Web.UI.WebControls.DataControlFieldHeaderCell)
{
((DataControlFieldHeaderCell)current).Style.Add( " border-right " , " solid 1px #cdcdcd " );
((DataControlFieldHeaderCell)current).Style.Add( " border-bottom " , " solid 1px #cdcdcd " );
((DataControlFieldHeaderCell)current).Style.Add( " font-family " , " arial " );
((DataControlFieldHeaderCell)current).Style.Add( " color " , " #3D3D3D " );
((DataControlFieldHeaderCell)current).Style.Add( " font-size " , " 10pt " );
((DataControlFieldHeaderCell)current).Style.Add( " background-color " , " #F1FBFF " );
}
else if (current is System.Web.UI.WebControls.DataControlFieldCell)
{
((DataControlFieldCell)current).Style.Add( " border-right " , " solid 1px #cdcdcd " );
((DataControlFieldCell)current).Style.Add( " border-bottom " , " solid 1px #cdcdcd " );
((DataControlFieldCell)current).Style.Add( " font-family " , " arial " );
((DataControlFieldCell)current).Style.Add( " color " , " #3D3D3D " );
((DataControlFieldCell)current).Style.Add( " font-size " , " 10pt " );
}
if (current.HasControls())
{
GridViewExportUtil.PrepareControlForExport(current);
}
}
}
}
}
调用方法:
protected void ButtonExportGrid_Click(object sender, EventArgs e)
{
DataTable dtTrListExport = bllTr_list.GetDataList(DatePickerBegintime.StringValue.ToString().Trim(), DatePickerEndtime.StringValue.ToString().Trim());
dtTravellingListExport.Columns.Remove(dtTrListExport .Columns["tr_id"]);
dtTravellingListExport.Columns.Remove(dtTrListExport .Columns["Itinerary"]);
dtTravellingListExport.Columns.Remove(dtTrListExport .Columns["Durat"]);
this.GridViewReport.AllowPaging = false;
this.GridViewReport.DataSource = dtTrListExport ;
this.GridViewReport.DataBind();
string fileName = GridViewExportUtil.GetExportFileName("Customers.xls", this.GridViewReport, Server.MapPath(""));
HttpResponse httpResponse = System.Web.HttpContext.Current.Response;
FileInfo fileinfo = new FileInfo(Server.MapPath("") + @"\" + fileName);
httpResponse.Clear();
httpResponse.ClearHeaders();
httpResponse.Buffer = false;
httpResponse.ContentType = "application/octet-stream";
httpResponse.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileinfo.Name, System.Text.Encoding.UTF8));
//httpResponse.AppendHeader("Content-Length", file.Length.ToString());
httpResponse.WriteFile(fileinfo.FullName);
httpResponse.End();
httpResponse.Flush();
httpResponse.Close();
this.GridViewReport.AllowPaging = true;
}