这个有局限性,只导出gridview的,可能能导其他吧,没有研究下去了。
有点就是快速,简便。直接代码
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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 partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
toExcelClk();
}
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
private void ToExcel(Control ctl, string FileName)
{
HttpContext.Current.Response.Charset = "GBK";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF7;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName);
ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString().Replace("<a","<span").Replace("/a>","/span"));
HttpContext.Current.Response.End();
}
private void toExcelClk()
{
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
GridView1.DataBind();
ToExcel(GridView1 , "OFS_Data.xls");
GridView1.AllowPaging = true;
GridView1.AllowSorting = true;
GridView1.DataBind();
}
}
前端的代码
<%@ Page Language="C#" EnableEventValidation = "false" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
啦啦啦
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateField HeaderText="ID" InsertVisible="False" SortExpression="ID">
<ItemTemplate>
<%-- <a href='show.aspx?id=<%#Eval("ID") %>'><%# Eval("ID") %></a>--%>
<a href='show_<%#Eval("ID") %>.html'><%# Eval("ID") %>是啊我</a>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />
<asp:BoundField DataField="pwd" HeaderText="pwd" SortExpression="pwd" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TestConnectionString %>"
SelectCommand="SELECT * FROM [user]"></asp:SqlDataSource>
<asp:Button ID="Button1" runat="server" Text="Button" οnclick="Button1_Click" />
</div>
</form>
</body>
</html>
开始的时候,girdview有a标签的也同时导出了,后来想想这种办法就是直接导gridview的。所以解决的办法就是直接把a标签给替换掉:
HttpContext.Current.Response.Write(tw.ToString().Replace("<a","<span").Replace("/a>","/span"));