熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

關於Asp.net中導出Excel表格的問題

2013-11-13 09:56:13  來源: .NET編程 



        private void ExportExcelFromDataGrid
                         ( string filename  SystemWebUIWebControlsDataGrid ToExcelGrid )
        {
            ResponseClear();
            ResponseBuffer=   true;     
            ResponseCharset=utf;           
            ResponseAppendHeader                                   (ContentDispositionattachment;filename=+ServerUrlEncode ( filename ) );     
            ResponseContentEncoding=SystemTextEncodingDefault;//設置輸出流為簡體中文   
            ResponseContentType   =   application/msexcel;//設置輸出文件類型為excel文件     
            thisEnableViewState   =   false;           
            SystemGlobalizationCultureInfo   myCItrad   =  
                                       new   SystemGlobalizationCultureInfo(ZHCNtrue);   
            SystemIOStringWriter   oStringWriter   =   new   SystemIOStringWriter(myCItrad);     
            SystemWebUIHtmlTextWriter   oHtmlTextWriter   =   
                                    new   SystemWebUIHtmlTextWriter(oStringWriter);   
            ToExcelGridRenderControl(oHtmlTextWriter);     
            ResponseWrite(oStringWriterToString());
            ResponseEnd();
        }

        private void Button_Click(object sender SystemEventArgs e)
        {
            thisPanelVisible = false;            
            string filename = 內訓師xls;
            thisDataGridColumns[]Visible = true;
            thisDataGridColumns[]Visible = true;
            thisDataGridColumns[thisDataGridColumnsCount]Visible = false;  // *
            thisDataGridColumns[thisDataGridColumnsCount]Visible = false;  // *
            thisDataGridAllowSorting = false;  // *
            thisDataGridAllowPaging = false; 
            thisDataGridSelectedIndex = ;    // *
            thisBindGrid();
            thisExportExcelFromDataGrid ( filename  thisDataGrid );
        }
    }
    原理是利用DataGrid(其實是其父類Control)的RenderControl方法輸出整個DataGrid的外觀時將這些HTML代碼寫入到緩沖區同時設置一下 ContentType 讓Excel自己的自動糾錯功能將這個輸出存為一個Excel文件

很多網上的朋友使用了以上這種可粘貼性強的代碼發現不好用反映的錯誤類似
LinkButton必須放在一個具有runat=server的標簽的Form之類的話而更多的網友說
問題很明顯因為DataGrid沒有放在runat=server 的Form裡面加上就可以了

我認為這種回答是很不准確的理由如下

    通常使用這種代碼的人他/她的DataGrid最起碼已經能用了所以必定放在那個具有runat=server 的form標簽裡了
    報錯是LinkButton而不是DataGrid很多細心的朋友很可能會說我一直在用DataGridLinkButton在哪裡來的
其實真正的問題是上面的代碼沒有加了 // * 的那幾行代碼引起的
當然如果你的DataGrid沒有排序沒有使用那種按鈕列的話是不會出問題的
言歸正傳LinkButtion其實是你將DataGrid設為可排序時候的表頭包含的所以我要將DataGrid的排序設為False
同樣得到上面的其實那些按鈕列什麼編輯刪除等等這些也是用了LinkButton把他設為不可見就是了
其實說得再明白一點就是將有可能產生LinkButton或其他控件的東西都不讓它輸出就是了
From:http://tw.wingwit.com/Article/program/net/201311/12031.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.