关于DATAGRID 结果生成 EXCEL 求数据查询集 DATAGRID 生成EXECEL 代码 谢谢大侠 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 string User=Session["User"].ToString(); Dsc.Ds=Bss.DpcDown(Date,User).Ds; string name=Server.MapPath("../").ToString() + @"temp\Schedule"+DateTime.Today.ToString("yyyyMMdd")+new Random(DateTime.Now.Millisecond).Next(10000).ToString()+".csv";//存放到web.config中downloadurl指定的路径,文件格式为当前日期+4位随机数 FileStream fs=new FileStream(name,FileMode.Create,FileAccess.Write); StreamWriter sw=new StreamWriter(fs,System.Text.Encoding.GetEncoding("gb2312")); string Head=""; for(int i=0;i<Dsc.Ds.Tables[0].Columns.Count;i++) { if(i==Dsc.Ds.Tables[0].Columns.Count-1) { Head+=Dsc.Ds.Tables[0].Columns[i].ColumnName; } else { Head+=Dsc.Ds.Tables[0].Columns[i].ColumnName+","; } } sw.WriteLine(Head); foreach(DataRow dr in Dsc.Ds.Tables[0].Rows) { string Detail=""; for(int i=0;i<Dsc.Ds.Tables[0].Columns.Count;i++) { if(i==Dsc.Ds.Tables[0].Columns.Count-1) { Detail+=dr[i].ToString() ; } else { Detail+=dr[i].ToString()+","; } } sw.WriteLine(Detail); } sw.Close(); Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(name)); Response.ContentType = "application/ms-excel";// 指定返回的是一个不能被客户端读取的流,必须被下载 Response.WriteFile(name); // 把文件流发送到客户端 Response.End(); protected void Button1_Click( object sender, System.EventArgs e ) { Response.Clear(); Response.Buffer = true; Response.Charset = "GB2312"; Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls"); // 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!! Response.ContentEncoding = System.Text.Encoding.UTF7; Response.ContentType = "application/ms-excel";//设置输出文件类型为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(); } public override void VerifyRenderingInServerForm( Control control ) { }值得注意的是VerifyRenderingInServerForm重载方法:MSDN上的 VerifyRenderingInServerForm 方法的描述: 必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息。发送回或依赖于注册的脚本块的控件应该在 Control.Render 方法的重写中调用此方法。呈现服务器窗体元素的方式不同的页可以重写此方法以在不同的条件下引发异常。 如果回发或使用客户端脚本的服务器控件没有包含在 HtmlForm 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 HtmlForm 控件中时提供明确的错误信息。 开发自定义服务器控件时,通常在为任何类型的输入标记重写 Render 方法时调用该方法。这在输入控件调用 GetPostBackEventReference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。 没有这个方法,程序将报错。 private void Button1_Click(object sender,System.EventAres e){ string strHea=""; //表头名称 //读入内存缓冲区 StringWriter sw=new StringWriter(); sw.WriteLine(strHead); sw.WriteLine("标题1\t标题2\t标题3\t标题4\t"); //这里做一个循环,你要输出的数据有几行,就循环几次 dsTemp格式为DataSet foreach(DataRow dr in dsTemp.Table[0].Rows) { string strData1 = dr["字段名称1"]; string strData1 = dr["字段名称2"]; string strData1 = dr["字段名称3"]; string strData1 = dr["字段名称4"]; sw.WriteLine(strData1+"\t" + strData2 + "\t" + strData3+"\t" + strData4) } sw.close(); Response.AddHeader("Content-Disposition","attachment;filename=ResultOutput.xls");//输出的文件 Response.ContentType="application/ms-excel"; Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312"); Response.Write(sw); Response.End();}还需要添加一个Excel的引用,MS是Microsoft Excel 11.0 Object Library 不知道是不是,你试试看吧~这是在vs2003下写的 无法找到表 0。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 无法找到表 0。 楼主,怎么说呢?你看一下,运行这么一个简单的代码: Response.AddHeader("Content-Disposition", "attachment; filename=xxx.xls"); Response.ContentType = "application/ms-excel"; Response.Write("<table><tr><td>asdf</td></tr></table>");它就能输出一个excel文件.就知道了,在页头加上那两句, 原来的页面不变,只输出一个dagagrid ,它就会原样生成excel. C# code protected void Button1_Click( object sender, System.EventArgs e ) { Response.Clear(); Response.Buffer = true; Response.Charset = "GB2312"; Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls"); // 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!! Response.ContentEncoding = System.Text.Encoding.UTF7; Response.ContentType = "application/ms-excel";//设置输出文件类型为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(); } public override void VerifyRenderingInServerForm( Control control ) { } 无法找到表0的原因应该是你没有定义或初始化dsTemp这个变量吧!!!dsTemp就是你的DataGrid的数据源 你把循环去掉,能否输出一个Excel呢?只带表头和一行标题的! 数据刷新 咨询专家相片绑定数据库sql 请问如何在页面直接执行SQL语句? 如何在asp.net中删除缓存信息啊? 快帮帮我啊,服务器控件位置改变的问题 如何在Asp.Net上传中实现在选择文件窗口中实现多文件选择 求教 如何去掉一个列表框的边框!!! 为什么水晶报表打印不出来啊 怎么让CheckBoxList只能选择一项 能否通过asp.net和c#语言得到浏览网页的客户端的系统信息? 上传好图片后自动截屏,这功能可以实现? FLASH显示时候为什么要刷新才显示,在线等
Dsc.Ds=Bss.DpcDown(Date,User).Ds;
string name=Server.MapPath("../").ToString() + @"temp\Schedule"+DateTime.Today.ToString("yyyyMMdd")+new Random(DateTime.Now.Millisecond).Next(10000).ToString()+".csv";//存放到web.config中downloadurl指定的路径,文件格式为当前日期+4位随机数
FileStream fs=new FileStream(name,FileMode.Create,FileAccess.Write);
StreamWriter sw=new StreamWriter(fs,System.Text.Encoding.GetEncoding("gb2312"));
string Head="";
for(int i=0;i<Dsc.Ds.Tables[0].Columns.Count;i++)
{
if(i==Dsc.Ds.Tables[0].Columns.Count-1)
{
Head+=Dsc.Ds.Tables[0].Columns[i].ColumnName;
}
else
{
Head+=Dsc.Ds.Tables[0].Columns[i].ColumnName+",";
}
}
sw.WriteLine(Head);
foreach(DataRow dr in Dsc.Ds.Tables[0].Rows)
{
string Detail="";
for(int i=0;i<Dsc.Ds.Tables[0].Columns.Count;i++)
{
if(i==Dsc.Ds.Tables[0].Columns.Count-1)
{
Detail+=dr[i].ToString() ;
}
else
{
Detail+=dr[i].ToString()+",";
}
}
sw.WriteLine(Detail);
}
sw.Close();
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(name));
Response.ContentType = "application/ms-excel";// 指定返回的是一个不能被客户端读取的流,必须被下载
Response.WriteFile(name); // 把文件流发送到客户端
Response.End();
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
// 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.ContentType = "application/ms-excel";//设置输出文件类型为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(); }
public override void VerifyRenderingInServerForm( Control control )
{ }值得注意的是VerifyRenderingInServerForm重载方法:
MSDN上的 VerifyRenderingInServerForm 方法的描述:
必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息。发送回或依赖于注册的脚本块的控件应该在 Control.Render 方法的重写中调用此方法。呈现服务器窗体元素的方式不同的页可以重写此方法以在不同的条件下引发异常。
如果回发或使用客户端脚本的服务器控件没有包含在 HtmlForm 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 HtmlForm 控件中时提供明确的错误信息。
开发自定义服务器控件时,通常在为任何类型的输入标记重写 Render 方法时调用该方法。这在输入控件调用 GetPostBackEventReference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。 没有这个方法,程序将报错。
{
string strHea=""; //表头名称
//读入内存缓冲区
StringWriter sw=new StringWriter();
sw.WriteLine(strHead);
sw.WriteLine("标题1\t标题2\t标题3\t标题4\t");
//这里做一个循环,你要输出的数据有几行,就循环几次 dsTemp格式为DataSet
foreach(DataRow dr in dsTemp.Table[0].Rows)
{
string strData1 = dr["字段名称1"];
string strData1 = dr["字段名称2"];
string strData1 = dr["字段名称3"];
string strData1 = dr["字段名称4"];
sw.WriteLine(strData1+"\t" + strData2 + "\t" + strData3+"\t" + strData4)
}
sw.close();
Response.AddHeader("Content-Disposition","attachment;filename=ResultOutput.xls");//输出的文件
Response.ContentType="application/ms-excel";
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
Response.Write(sw);
Response.End();
}还需要添加一个Excel的引用,MS是Microsoft Excel 11.0 Object Library 不知道是不是,你试试看吧~
这是在vs2003下写的
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 无法找到表 0。
Response.ContentType = "application/ms-excel";
Response.Write("<table><tr><td>asdf</td></tr></table>");
它就能输出一个excel文件.就知道了,在页头加上那两句, 原来的页面不变,只输出一个dagagrid ,它就会原样生成excel.
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
// 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.ContentType = "application/ms-excel";//设置输出文件类型为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(); }
public override void VerifyRenderingInServerForm( Control control )
{ }
dsTemp就是你的DataGrid的数据源
只带表头和一行标题的!