关于在网页上导出Excel的三个有关问题,下载路径对话框、迅雷等下载器兼容和公有类的传值。求大神来指点几番,先说声多谢了
关于在网页上导出Excel的三个问题,下载路径对话框、迅雷等下载器兼容和公有类的传值。求大神来指点几番,先说声谢谢了
先贴出我的关键代码,我要实现的功能是在网页上点击按钮能下载相关表格文件
基本上我已经成功地实现其功能,但是想要改进一下,因此有3个问题求大神解答,具体如下:
一:导师要求我点击按钮时弹出文件保存对话框,所以我在点击事件写了
二:在上面的情况里,我的IE、Chrome和FireFox关闭迅雷下载支持时,点击按钮时弹出了浏览器自带的下载器,并成功下载了相关表格(.xls),但当我打开迅雷支持点击下载调用迅雷时,迅雷下载的却是我的网页文件(.aspx),如图

我认为这算是我的网页对迅雷等BT下载软件不支持所致,请问有什么方法能让用迅雷下载时能正常下载到表格文件(.xls)?
三:简单地实现这个导出数据的功能后,举一反三地,我想为这个功能写一个公有类,但是在项目根目录下建的公有类(.cs)根本没有
字有点多,问题也有3个,希望各位高手大牛能耐心解答我的问题,本人虚心求教,先说声谢谢了
------解决思路----------------------
解决迅雷的问题 参考
http://www.cnblogs.com/GIS_zhou/archive/2009/10/07/1578658.html
公有类
把你导出的代码放在类的方法里面。传相应的值进行下载
先贴出我的关键代码,我要实现的功能是在网页上点击按钮能下载相关表格文件
protected void DataButton_Click(object sender, EventArgs e)
{
if (DBtable.Rows.Count==0)
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascriopt' defer>alert('没有数据,无法导出!');</script>");
}
else
{
ExportData Export = new ExportData();
StringWriter StrWri = Export.ExportExcel(DBtable);
HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding("GB2312");
string EncodeName = HttpUtility.UrlEncode("数据统计", Encoding.UTF8);
string ExportName = "attachment;filename=" + EncodeName + ".xls";
HttpContext.Current.Response.AppendHeader("Content-Disposition", ExportName);
HttpContext.Current.Response.ContentType = "application/ms-excel";
this.Page.EnableViewState = false;
Response.Write(StrWri);
Response.End();
}
}
基本上我已经成功地实现其功能,但是想要改进一下,因此有3个问题求大神解答,具体如下:
一:导师要求我点击按钮时弹出文件保存对话框,所以我在点击事件写了
HttpContext.Current.Response.AppendHeader("Content-Disposition", ExportName);按照网上搜出来的说法,"Content-Disposition"可以让浏览器弹出下载对话框,可实际上点击按钮是调用了浏览器关联的下载器,我的IE、Chrome和FireFox都是这样(打开迅雷支持就是调用迅雷,关闭就是打开自带的下载器),请问如何做到真正的调用Windows保存对话框来选择下载路径?
二:在上面的情况里,我的IE、Chrome和FireFox关闭迅雷下载支持时,点击按钮时弹出了浏览器自带的下载器,并成功下载了相关表格(.xls),但当我打开迅雷支持点击下载调用迅雷时,迅雷下载的却是我的网页文件(.aspx),如图
我认为这算是我的网页对迅雷等BT下载软件不支持所致,请问有什么方法能让用迅雷下载时能正常下载到表格文件(.xls)?
三:简单地实现这个导出数据的功能后,举一反三地,我想为这个功能写一个公有类,但是在项目根目录下建的公有类(.cs)根本没有
this.Page.EnableViewState = false;这两个方法可以用,网上也搜不出用using的办法,估计是“Page”“Response”这两个方法只有在网页文件中才能使用,至于原因我也不清楚,求解答,我本人初学的asp.net,个人认为是这两个方法需要网页本身自带的某些属性才能对服务器完成操作,现在我只能在公有类写些连接database和获取table的方法,贴出来的那段代码唯有在网页的后台代码上写。不知道各位有没有什么办法,能让公有类(.cs)也写进/完成我上面写的代码/功能,这样能使其他网页的也能调用,减少代码重复
Response.Write(StrWri);
字有点多,问题也有3个,希望各位高手大牛能耐心解答我的问题,本人虚心求教,先说声谢谢了
------解决思路----------------------
解决迅雷的问题 参考
http://www.cnblogs.com/GIS_zhou/archive/2009/10/07/1578658.html
公有类
把你导出的代码放在类的方法里面。传相应的值进行下载