我想实现不通过reportview控件,直接点击button,将报表以excel形式导出。
好像需要用到sqlserver的webservices,请坐过的朋友帮帮忙。我已经实现了通过reportview的render方法导出,但是不知道如何不通过reportview直接导出。在网上查了一下,相关的资料不多。提供相关链接的朋友也欢迎。
好像需要用到sqlserver的webservices,请坐过的朋友帮帮忙。我已经实现了通过reportview的render方法导出,但是不知道如何不通过reportview直接导出。在网上查了一下,相关的资料不多。提供相关链接的朋友也欢迎。
这样不行吗?前台
EnableEventValidation="false"
#region 导出
public override void VerifyRenderingInServerForm(Control control)
{
}
protected void BtnPrint_Click(object sender, 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.AfficheGV.RenderControl(oHtmlTextWriter);
Response.Output.Write(oStringWriter.ToString());
Response.Flush();
Response.End();
}
#endregion
1 就把reportview隐藏,还是使用render方法
2 直接将dateset导出public void WriteDSToExcel(DataSet ds)
{
string strFile="";
string path="";
DataTable dt=ds.Tables[0];
//文件信息设置
strFile=strFile+"LogBackUp";
strFile=strFile+DateTime.Now.ToString("yyyyMMddhhmmss");
strFile=strFile+".xls";
path=Server.MapPath(strFile);
System.IO.FileStream fs=new FileStream(path,System.IO.FileMode.Create,System.IO.FileAccess.Write);
StreamWriter sw=new StreamWriter(fs,new System.Text.UnicodeEncoding());
//画表头
for(int i=0;i<dt.Columns.Count;i++)
{
sw.Write(dt.Columns[i].ColumnName);
sw.Write("\t");
}
sw.WriteLine("");
//画表体
for(int i=0;i<dt.Rows.Count;i++)
{
sw.Write(DelQuota(dt.Rows[i]["UserID"].ToString()));
sw.Write("\t");
sw.Write(DelQuota(dt.Rows[i]["UserName"].ToString()));
sw.Write("\t");
sw.Write(DelQuota(dt.Rows[i]["provinceID"].ToString()));
sw.Write("\t");
sw.Write(DelQuota(dt.Rows[i]["cityID"].ToString()));
sw.Write("\t");
sw.Write(DelQuota(dt.Rows[i]["areaID"].ToString()));
sw.Write("\t");
sw.Write(DelQuota(dt.Rows[i]["Enabled"].ToString()));
sw.WriteLine("");
}
sw.Flush();
sw.Close();
}
然后设置路径,用render生成临时文件,生成临时文件,客户端下载。。虽然是实现了。但是我觉得应该有更直接的方法。
以前看别人在winform下实现过,但是没有注释,根本看不懂,而且msdn帮助都好少。。
把DelQuota去掉,
另外引入using System.IO;
文件就会生成在你的项目的目录里了
查看path
webform ,使用语言c#
this.AfficheGV.RenderControl(oHtmlTextWriter);
第二个直接导Dataset,不用空间
----------------------------------------
RenderControl方法会有很多问题的,我的报表出力之后是带格式和选择参数的。
直接用这个方法不行。需要使用.ServerReport.Render()方法。
第二个直接导Dataset,不用空间
---------------------------
我数据不是从dataset来的。
不过同样感谢。