zoukankan      html  css  js  c++  java
  • 关于Asp.net中使用以下代码导出Excel表格的问题


            
    private void ExportExcelFromDataGrid( string filename , System.Web.UI.WebControls.DataGrid ToExcelGrid )
            
    {
                Response.Clear();
                Response.Buffer
    =   true;     
                Response.Charset
    ="utf-8";           
                Response.AppendHeader(
    "Content-Disposition","attachment;filename="+Server.UrlEncode ( filename ) );     
                Response.ContentEncoding
    =System.Text.Encoding.Default;//设置输出流为简体中文   
                Response.ContentType   =   "application/ms-excel";//设置输出文件类型为excel文件。     
                this.EnableViewState   =   false;           
                System.Globalization.CultureInfo   myCItrad   
    =   new   System.Globalization.CultureInfo("ZH-CN",true);   
                System.IO.StringWriter   oStringWriter   
    =   new   System.IO.StringWriter(myCItrad);     
                System.Web.UI.HtmlTextWriter   oHtmlTextWriter   
    =   new   System.Web.UI.HtmlTextWriter(oStringWriter);   
                ToExcelGrid.RenderControl(oHtmlTextWriter);     
                Response.Write(oStringWriter.ToString());
                Response.End();
            }


            
    private void Button4_Click(object sender, System.EventArgs e)
            
    {
                
    this.Panel1.Visible = false;            
                
    string filename = "内训师.xls";
                
    this.DataGrid1.Columns[6].Visible = true;
                
    this.DataGrid1.Columns[7].Visible = true;
                
    this.DataGrid1.Columns[this.DataGrid1.Columns.Count-1].Visible = false;
                
    this.DataGrid1.Columns[this.DataGrid1.Columns.Count-2].Visible = false;
                
    this.DataGrid1.AllowSorting = false;
                
    this.DataGrid1.AllowPaging = false;
                
    this.DataGrid1.SelectedIndex = -1;
                
    this.BindGrid();
                
    this.ExportExcelFromDataGrid ( filename , this.DataGrid1 );
            }


    原理是利用DataGrid(其实是其父类Control)的RenderControl方法输出,整个DataGrid的外观时,将这些HTML代码写入到缓冲区,同时设置一下 ContentType ,让Excel自己的自动纠错功能将这个输出存为一个Excel文件。

    很多网上的朋友使用了以上这种可粘贴性强的代码,发现不好用,反映的错误类似:
    “LinkButton必须放在一个具有runat=server的标签的Form”之类的话,而更多的网友说:
    问题很明显,因为DataGrid没有放在runat=server 的Form里面,加上就可以了。

    我认为,这种回答是很不准确的,理由如下:
    1. 通常使用这种代码的人他/她的DataGrid,最起码已经能用了,所以必定放在那个具有runat=server 的form标签里了。
    2. 报错是LinkButton,而不是DataGrid,很多细心的朋友很可能会说,我一直在用DataGrid,LinkButton在哪里来的。
    其实真正的问题是,上面的代码没有加了 // * 的那几行代码引起的。
    当然如果你的DataGrid,没有排序,没有使用那种按钮列的话,是不会出问题的。
    言归正传,LinkButtion其实是你将DataGrid设为可排序时候,的表头包含的,所以我要将DataGrid的排序设为False。
    同样得到上面的其实,那些按钮列,什么"编辑"、“删除”等等这些,也是用了LinkButton,把他设为不可见就是了。
    其实说得再明白一点就是,将有可能产生LinkButton,或其他控件的东西都不让它输出就是了
  • 相关阅读:
    [洛谷P2523] HAOI2011 Problem c
    [CF156D] Clues
    [洛谷P4769] NOI2018 冒泡排序
    [CF605E] Intergalaxy Trips
    [洛谷P4492] HAOI2018 苹果树
    [洛谷P3349] ZJOI2016 小星星
    [洛谷P4336] SHOI2016 黑暗前的幻想乡
    [洛谷P5364] SNOI2017 礼物
    [洛谷P2606] ZJOI2010 排列计数
    [洛谷P6078] CEOI2004 candy
  • 原文地址:https://www.cnblogs.com/killkill/p/510289.html
Copyright © 2011-2022 走看看