關於Asp.net中使用以下代碼匯出Excel表格的問題

來源:互聯網
上載者:User
        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,或其他控制項的東西都不讓它輸出就是了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.