用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();
}

解决方案 »

  1.   

    用Response.输出DataTable流到Excel上
    不是输出到客户端浏览器
    所以不能更新页面我看需要另一个network steam对象来执行你的CreateExcel()
      

  2.   

    TO 欧卡
    你说的network steam对象 是指什么, 还有其他的执行办法吗?
      

  3.   

    要不就不写
      this.tabButtonExp.Visible = false;
      this.tabUICon.Visible = false;
      this.tabMain.Visible = true;
    要不就把CREATEEXCEL的调用写到另外一个ASPX文件中用参数传递的方式。
      

  4.   

    在你的生成页内,写这样的代码; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    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
      

  5.   

    CreateExce()我是放在一个单独的页处理的,代码如下:
    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生成一个英文字段数组,每一行都寻环一次该数组,并输出
      

  6.   

    调用页用这样的形式;
    Button2.Visible = false;  //标准事件
    Response.Write("<script language=javascript>window.open('你的生成叶面','_blank');</script>");  //放到CLIENT运行;一定要使用WINDOW。OPEN而不是HREF必须采用脚本的形式调用,明白吗?
      

  7.   

    你可以不用QUERYSTRING传撒;把参数放到SESSION里;
    Session["XXXXXXXXXXXXXXXX"] = xxxxxxxxxxxxxxxxxxxxxxxxx;