用Response.输出DataTable流到Excel 功上已经做完了,
只是当输出流完成Response.End()
之后,在按钮事件中
//以下是页面的三个表格
this.tabButtonExp.Visible = false;
this.tabUICon.Visible = false;
this.tabMain.Visible = true;
这几句没有执行效果,所以不能更新页面?看看有什么解决办法吗?
private void BtnToExcel_Click(object sender, System.EventArgs e)
{
this.tabButtonExp.Visible = false;
this.tabUICon.Visible = false;
this.tabMain.Visible = true;
this.DataToExcel1.CreateExcel(); //调用输入方法
}public void CreateExcel(DataTable dt,string TableHead,string[] Field)
{
Response.Clear();
Response.Buffer= true;
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
//设置输出流为简体中文
Response.ContentType = "application/ms-excel";
//设置输出文件类型为excel文件。
this.EnableViewState = false;
string DataItem = "";
Response.Write(TableHead);
//逐行处理数据
foreach(DataRow row in dt.Rows)
{
for (int i=0;i<Field.Length;i++)
{
if (i==Field.Length-1)
DataItem += row[Field[i].ToString()].ToString()+"\n";
else
DataItem += row[Field[i].ToString()].ToString()+"\t";
}
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
Response.Write(DataItem);
DataItem = "";
}
Response.End();
}
只是当输出流完成Response.End()
之后,在按钮事件中
//以下是页面的三个表格
this.tabButtonExp.Visible = false;
this.tabUICon.Visible = false;
this.tabMain.Visible = true;
这几句没有执行效果,所以不能更新页面?看看有什么解决办法吗?
private void BtnToExcel_Click(object sender, System.EventArgs e)
{
this.tabButtonExp.Visible = false;
this.tabUICon.Visible = false;
this.tabMain.Visible = true;
this.DataToExcel1.CreateExcel(); //调用输入方法
}public void CreateExcel(DataTable dt,string TableHead,string[] Field)
{
Response.Clear();
Response.Buffer= true;
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
//设置输出流为简体中文
Response.ContentType = "application/ms-excel";
//设置输出文件类型为excel文件。
this.EnableViewState = false;
string DataItem = "";
Response.Write(TableHead);
//逐行处理数据
foreach(DataRow row in dt.Rows)
{
for (int i=0;i<Field.Length;i++)
{
if (i==Field.Length-1)
DataItem += row[Field[i].ToString()].ToString()+"\n";
else
DataItem += row[Field[i].ToString()].ToString()+"\t";
}
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
Response.Write(DataItem);
DataItem = "";
}
Response.End();
}
解决方案 »
- 高分求牛人解答
- RadControls for ASP.NET AJAX汉化的问题?!
- 请问各位大虾,如果page_load中设置divxxx.Visible=false的话,如何在js获得该divxxx的id
- Repeater里面的CheckBox怎么实现全选
- ???怎样删除文件夹的全部内容
- window.open在ASP.NET中使用的疑问
- access访问出错
- 一个textbox同时绑定了两个RegularExpressionValidator验证控件,当同时满足两个控件验证,能否只让前面一个验证控件显示,而后一个不显示?
- 请问:我在写一个服务器控件,如何把自己的js脚本包含到dll中?
- 在Page_Load中怎么取得是那个控件的事件被激发
- 高分求,与AD账号整合的问题
- 再次问关于博客问题 请大哥大姐指点!!!!!!!!!!急
不是输出到客户端浏览器
所以不能更新页面我看需要另一个network steam对象来执行你的CreateExcel()
你说的network steam对象 是指什么, 还有其他的执行办法吗?
this.tabButtonExp.Visible = false;
this.tabUICon.Visible = false;
this.tabMain.Visible = true;
要不就把CREATEEXCEL的调用写到另外一个ASPX文件中用参数传递的方式。
{
// 在此处放置用户代码以初始化页面
if(Request["act"]=="excel")
CreateExcel(Request["f"]); //参数都通过QUERYSTRING传递过来
} public void CreateExcel(string Fields)
{
Response.Clear();
Response.Buffer= true;
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
//设置输出流为简体中文
Response.ContentType = "application/ms-excel";
//设置输出文件类型为excel文件。
this.EnableViewState = false;
Response.Write("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); //逐行处理数据
Response.End();
}
调用页用这样的形式;
Button2.Visible = false; //标准事件
Response.Write("<script language=javascript>window.open('toExcel.aspx?act=excel','_blank');</script>"); //放到CLIENT运行;一定要使用WINDOW。OPEN而不是HREF
public class ExcelDownLoad : System.Web.UI.Page
{
public Main SourcePage;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!this.Page.IsPostBack)
{
SourcePage = (Main)Context.Handler; Response.Clear();
Response.Buffer= true;
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
//设置输出流为简体中文
Response.ContentType = "application/ms-excel";
//设置输出文件类型为excel文件。
this.EnableViewState = false;
string DataItem = "";
string TableHead = "";
for (int i=0;i<this.SourcePage.TargetList.Items.Count;i++)
{
if (i==this.SourcePage.TargetList.Items.Count-1)
TableHead += this.SourcePage.TargetList.Items[i].Text+"\n";
else
TableHead += this.SourcePage.TargetList.Items[i].Text+"\t";
}
Response.Write(TableHead);
//逐行处理数据
foreach(DataRow row in this.SourcePage.dt.Rows)
{
for (int i=0;i<this.SourcePage.TargetList.Items.Count;i++)
{
if (i==this.SourcePage.TargetList.Items.Count-1)
DataItem += row[this.SourcePage.TargetList.Items[i].Value].ToString()+"\n";
else
DataItem += row[this.SourcePage.TargetList.Items[i].Value].ToString()+"\t";
} //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
Response.Write(DataItem);
DataItem = "";
}
Response.End();
}
Server.Transfer("Main.aspx");//
}
调用页按钮事件是:Server.Transfer("../ZL/ExcelDownLoad.aspx");
这样,可以在二个页面通过属性调用数据集和属性如果按照你的方法:
首先,要取得当前页ListBox的值,根据其值对DATATABLE选取数据
ListBox.text = 中文字段;
ListBox.value = 英文字段;
//如果参数都通过QUERYSTRING传递过来,那么需要传三个参数,怎么传数组和datatable 吗?
表头:可以用字符串直接传(中文字段)
数据:我是对DataTable数据集行扁历,用ListBox.value生成一个英文字段数组,每一行都寻环一次该数组,并输出
Button2.Visible = false; //标准事件
Response.Write("<script language=javascript>window.open('你的生成叶面','_blank');</script>"); //放到CLIENT运行;一定要使用WINDOW。OPEN而不是HREF必须采用脚本的形式调用,明白吗?
Session["XXXXXXXXXXXXXXXX"] = xxxxxxxxxxxxxxxxxxxxxxxxx;