FineUI/FineUI.Examples/grid/grid_excel.aspx.cs
三生石上 79ad9e6bc2 v4.2.3
2016-01-10 01:19:30 -05:00

134 lines
4.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Text;
using System.IO;
using AspNet = System.Web.UI.WebControls;
namespace FineUI.Examples.data
{
public partial class grid_excel : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
}
#region BindGrid
private void BindGrid()
{
DataTable table = DataSourceUtil.GetDataTable();
Grid1.DataSource = table;
Grid1.DataBind();
}
#endregion
#region Events
protected void Button1_Click(object sender, EventArgs e)
{
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=myexcel.xls");
Response.ContentType = "application/excel";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(GetGridTableHtml(Grid1));
Response.End();
}
private string GetGridTableHtml(Grid grid)
{
StringBuilder sb = new StringBuilder();
sb.Append("<meta http-equiv=\"content-type\" content=\"application/excel; charset=UTF-8\"/>");
sb.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">");
sb.Append("<tr>");
foreach (GridColumn column in grid.Columns)
{
sb.AppendFormat("<td>{0}</td>", column.HeaderText);
}
sb.Append("</tr>");
foreach (GridRow row in grid.Rows)
{
sb.Append("<tr>");
foreach (object value in row.Values)
{
string html = value.ToString();
if (html.StartsWith(Grid.TEMPLATE_PLACEHOLDER_PREFIX))
{
// 模板列
string templateID = html.Substring(Grid.TEMPLATE_PLACEHOLDER_PREFIX.Length);
Control templateCtrl = row.FindControl(templateID);
html = GetRenderedHtmlSource(templateCtrl);
}
else
{
// 处理CheckBox
if (html.Contains("f-grid-static-checkbox"))
{
if (html.Contains("uncheck"))
{
html = "×";
}
else
{
html = "√";
}
}
// 处理图片
if (html.Contains("<img"))
{
string prefix = Request.Url.AbsoluteUri.Replace(Request.Url.AbsolutePath, "");
html = html.Replace("src=\"", "src=\"" + prefix);
}
}
sb.AppendFormat("<td>{0}</td>", html);
}
sb.Append("</tr>");
}
sb.Append("</table>");
return sb.ToString();
}
/// <summary>
/// 获取控件渲染后的HTML源代码
/// </summary>
/// <param name="ctrl"></param>
/// <returns></returns>
private string GetRenderedHtmlSource(Control ctrl)
{
if (ctrl != null)
{
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
ctrl.RenderControl(htw);
return sw.ToString();
}
}
}
return String.Empty;
}
#endregion
}
}