1、出了问题。代码如下
bd();//这是我绑定数据源的代码
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());//两个参数"application/ms-excel", "User.xls"
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
GridView2.RenderControl(hw);//出错的地方-----------------------------------------------
Response.Output .Write(tw.ToString());
Response.End();报错的内容是类型“GridView”的控件“GridView2”必须放在具有 runat=server 的窗体标记内。
说明:我的GridView2是放在runat=server 的form内的。
且里面没有模版列,只有数据列。
2、寻求导出Excel的源代码?好的坏的都行,酌情结贴。
3、在线等。
bd();//这是我绑定数据源的代码
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());//两个参数"application/ms-excel", "User.xls"
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
GridView2.RenderControl(hw);//出错的地方-----------------------------------------------
Response.Output .Write(tw.ToString());
Response.End();报错的内容是类型“GridView”的控件“GridView2”必须放在具有 runat=server 的窗体标记内。
说明:我的GridView2是放在runat=server 的form内的。
且里面没有模版列,只有数据列。
2、寻求导出Excel的源代码?好的坏的都行,酌情结贴。
3、在线等。
//override掉这个方法
public override void VerifyRenderingInServerForm(Control control)
{
//注释掉下面的代码,否则在asp.net2.0下会报错(注:GridView是asp.net 2.0下的控件,1.1下一些控件也可以导出成Excel或者Word)
//base.VerifyRenderingInServerForm(control);
}楼主是否缺少上述代码?
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ExportDemo.aspx.cs" Inherits="ExportDemo" %><!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>GridView导出到Excel或Word文件</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvPersonList" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Id" HeaderText="编号" />
<asp:BoundField DataField="Name" HeaderText="姓名" />
<asp:TemplateField HeaderText="性别">
<ItemTemplate>
<%# Eval("Sex").ToString()=="true"?"男":"女" %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Age" HeaderText="年龄" />
<asp:TemplateField HeaderText="婚否">
<ItemTemplate>
<%# Boolean.Parse(Eval("Married").ToString())==true?"是":"否" %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnToExcel" runat="server" OnClick="btnToExcel_Click" Text="导出到Excel" />
<asp:Button ID="btnToWord" runat="server" OnClick="btnToWord_Click" Text="导出到Word" />
</div>
</form>
</body>
</html>
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;/// <summary>
/// 程序说明:这是一个GridView导出成Excel或者Word文件的实例。为了演示,我采用了自动生成DataTable,然后绑定。
/// 同时为了初学者查看代码方便,关键处我都做了注释。
/// 对程序说明,在asp.net 1.1中由于对控件呈现不是很严格,所以无需override void VerifyRenderingInServerForm(Control control)这个方法
/// 但在asp.net2.0中,控件的校验严格了,RenderControl代码只有走正常流程在render方法中它自己调用才能成功,
/// 在你自己写的事件方法中调用就会出现这个错误。这个错误信息有点误导,你明明写在服务器控件Form内,它照样会这样提醒你,
/// 实际上是asp.net2.0设置了内部变量控制RenderControl不允许在Render方法之外被轻易调用。如果不override VerifyRenderingInServerForm
/// 就会报错。我们override void VerifyRenderingInServerForm(Control control)这个方法,里面不写任何代码即可
/// </summary>
public partial class ExportDemo : System.Web.UI.Page
{
private string firstName = "赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华";
private string lastName = "猛勇刚强豹彪雁燕蓉菲";
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindGridView();
}
} private void BindGridView()
{
DataTable myData = CreateDataTable();
Session["MyData"] = myData;
gvPersonList.DataSource = myData;
gvPersonList.DataBind();
}
//手动生成DataTable
private DataTable CreateDataTable()
{
DataTable data = new DataTable();
DataColumn dcId = new DataColumn("ID", typeof(Int32));
//设置ID列自动递增
dcId.AutoIncrement = true;
//设置ID列初始值为1
dcId.AutoIncrementSeed = 1;
//设置ID列递增步长为1
dcId.AutoIncrementStep = 1;
//将ID列添加到DataTable中
data.Columns.Add(dcId);
data.Columns.Add(new DataColumn("Name", typeof(string)));
data.Columns.Add(new DataColumn("Age", typeof(int)));
data.Columns.Add(new DataColumn("Sex", typeof(bool)));
data.Columns.Add(new DataColumn("Married", typeof(bool)));
DataRow dataRow = null;
Random random = new Random();
//随机生成20条记录
for (int i = 0; i < 20; i++)
{
dataRow = data.NewRow();
//随机生成姓名
dataRow["Name"] = firstName.Substring(random.Next(firstName.Length), 1) + lastName.Substring(random.Next(lastName.Length), 1);
//随即生成介于20至100之间的年龄
int age = random.Next(20, 100);
dataRow["Age"] = age;
//随即设置性别
bool sex = (random.Next(100) % 2 == 0) ? true : false;
dataRow["Sex"] = sex;
if (((sex == true) && (age >= 22)) || ((sex == false) && (age >= 20)))//男性结婚年龄大于22周岁,女性结婚年龄大于20周岁
{
dataRow["Married"] = (random.Next(500) % 2 == 0) ? true : false;
}
else
{
dataRow["Married"] = false;
}
data.Rows.Add(dataRow);
}
return data;
}
//override掉这个方法
public override void VerifyRenderingInServerForm(Control control)
{
//注释掉下面的代码,否则在asp.net2.0下会报错(注:GridView是asp.net 2.0下的控件,1.1下一些控件也可以导出成Excel或者Word)
//base.VerifyRenderingInServerForm(control);
}
protected void btnToExcel_Click(object sender, EventArgs e)
{
Response.Clear();
Response.BufferOutput = true;
//设定输出的字符集
Response.Charset = "GB2312";
//假定导出的文件名为FileName.xls
Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
//设置导出文件的格式
Response.ContentType = "application/ms-excel";
//关闭ViewState
EnableViewState = false;
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ZH-CN", true);
System.IO.StringWriter stringWriter = new System.IO.StringWriter(cultureInfo);
System.Web.UI.HtmlTextWriter textWriter = new System.Web.UI.HtmlTextWriter(stringWriter);
gvPersonList.RenderControl(textWriter);
//把HTML写回浏览器
Response.Write(stringWriter.ToString());
Response.End();
}
//导出成Word文件
protected void btnToWord_Click(object sender, EventArgs e)
{
Response.Clear();
Response.BufferOutput = true;
//设定输出的字符集
Response.Charset = "GB2312";
//假定导出的文件名为FileName.doc
Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.doc");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
////设置导出文件的格式
Response.ContentType = "application/ms-word";
//关闭ViewState
gvPersonList.EnableViewState = false;
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ZH-CN", true);
System.IO.StringWriter stringWriter = new System.IO.StringWriter(cultureInfo);
System.Web.UI.HtmlTextWriter textWriter = new System.Web.UI.HtmlTextWriter(stringWriter);
gvPersonList.RenderControl(textWriter);
// //把HTML写回浏览器
Response.Write(stringWriter.ToString());
Response.End();
}
}
#region 导出Excel方法
private void Export(string FileType, string FileName)
{
//清楚分页
GridView1.AllowPaging = false;
BindData(); Response.Clear();
Response.Buffer = true;
//设定输出的字符集
Response.Charset = "GB2312";
//解决导出到Excel2007乱码问题
Response.Write("<meta http-equiv=Content-Type content=text/html;charset=GB2312>"); //假定导出的文件名为盘点结果表.xls
Response.AppendHeader("Content-Disposition", "attachment;filename=" +
HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
//解决导出到Excel2007乱码问题
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); //设置导出文件的格式
Response.ContentType = FileType;
//关闭ViewState
this.EnableViewState = false;
StringWriter stringWriter = new StringWriter();
HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter);
GridView1.RenderControl(textWriter);
//把HTML写回浏览器
Response.Write(stringWriter.ToString());
Response.Flush();
Response.End();
GridView1.AllowPaging = true;//恢复分页
//为GridView重新绑定数据源
BindData(); } #endregion
{
StringBuilder strb = new StringBuilder();
strb.Append(" <html xmlns:o=\"urn:schemas-microsoft-com:office:office\"");
strb.Append("xmlns:x=\"urn:schemas-microsoft-com:office:excel\"");
strb.Append("xmlns=\"http://www.w3.org/TR/REC-html40\"");
strb.Append(" <head> <meta http-equiv='Content-Type' content='text/html; charset=gb2312'>");
strb.Append(" <style>");
strb.Append(".xl26");
strb.Append(" {mso-style-parent:style0;");
strb.Append(" font-family:\"Times New Roman\", serif;");
strb.Append(" mso-font-charset:0;");
strb.Append(" mso-number-format:\"@\";}");
strb.Append(" </style>");
strb.Append(" <xml>");
strb.Append(" <x:ExcelWorkbook>");
strb.Append(" <x:ExcelWorksheets>");
strb.Append(" <x:ExcelWorksheet>");
//设置工作组名
strb.Append(" <x:Name>" + sheetName.ToString().Trim() + "</x:Name>"); strb.Append(" <x:WorksheetOptions>");
strb.Append(" <x:DefaultRowHeight>285 </x:DefaultRowHeight>");
strb.Append(" <x:Selected/>");
strb.Append(" <x:Panes>");
strb.Append(" <x:Pane>");
strb.Append(" <x:Number>3 </x:Number>");
strb.Append(" <x:ActiveCol>1 </x:ActiveCol>");
strb.Append(" </x:Pane>");
strb.Append(" </x:Panes>");
strb.Append(" <x:ProtectContents>False </x:ProtectContents>");
strb.Append(" <x:ProtectObjects>False </x:ProtectObjects>");
strb.Append(" <x:ProtectScenarios>False </x:ProtectScenarios>");
strb.Append(" </x:WorksheetOptions>");
strb.Append(" </x:ExcelWorksheet>");
strb.Append(" <x:WindowHeight>6750 </x:WindowHeight>");
strb.Append(" <x:WindowWidth>10620 </x:WindowWidth>");
strb.Append(" <x:WindowTopX>480 </x:WindowTopX>");
strb.Append(" <x:WindowTopY>75 </x:WindowTopY>");
strb.Append(" <x:ProtectStructure>False </x:ProtectStructure>");
strb.Append(" <x:ProtectWindows>False </x:ProtectWindows>");
strb.Append(" </x:ExcelWorkbook>");
strb.Append(" </xml>");
strb.Append("");
strb.Append(" </head> <body> <table align=\"center\" style='border-collapse:collapse;table-layout:fixed';> <tr>");
if (ds.Tables.Count > 0)
{ //写列标题
int columncount = ds.Tables[0].Columns.Count; foreach (string title in columnName)
{
strb.Append(" <td> <b>" + title + " </b> </td>");
} strb.Append(" </tr>"); //写数据
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
strb.Append(" <tr>");
foreach (string str in columnData)
{
strb.Append(" <td class='xl26'>" + ds.Tables[0].Rows[i][str].ToString() + " </td>");
}
strb.Append(" </tr>");
} }
strb.Append(" </body> </html>"); Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
this.EnableViewState = false;
Response.Write(strb);
Response.Flush();
Response.End(); }注意:Response.Write()输出的excel都是伪excel,不是真正的excel。这种格式的excel无法导入数据库。
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
//gaoyang [10/21/2006] 经测试如果设置为 GetEncoding("GB2312"),导出的文件将会出现乱码。
Response.ContentEncoding = System.Text.Encoding.UTF7; //设置输出文件类型为excel文件。
Response.ContentType = "application/ms-excel";
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
this.GridView1.RenderControl(oHtmlTextWriter);
Response.Output.Write(oStringWriter.ToString());
Response.Flush();
Response.End();
HttpContext curContext = System.Web.HttpContext.Current;
System.IO.StringWriter strWriter = new StringWriter();
System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(strWriter);
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = Encoding.GetEncoding("GB2312");
curContext.Response.Charset = "GB2312"; string query = "SELECT * FROM tbEmployeeM";
SqlConnection myConnection = new SqlConnection(ConnectString);
SqlDataAdapter ad = new SqlDataAdapter(query, myConnection);
DataSet ds = new DataSet();
ad.Fill(ds, "tbEmployeeM");
GridView GV = new GridView();//一个无分页的GridView
GV.DataSource = ds;
GV.AllowPaging = false;//这个改为false会出错
GV.DataBind();
GV.RenderControl(htmlWriter);
curContext.Response.Write(strWriter.ToString());
curContext.Response.End();
public override void VerifyRenderingInServerForm(Control control)
{ //base.VerifyRenderingInServerForm(control);
}