天天看點

包含自定義控件GridView 如何導出到Excel

我們常常會用到GridView導出到Excel的功能,我之前也有一些文章做了介紹。

可以參考的文章:

<a href="http://www.cnblogs.com/DotNetNuke/archive/2008/10/15/1311389.html" target="_blank">GridView導出到Excel和開源圖表工具</a>

<a href="http://www.cnblogs.com/DotNetNuke/archive/2008/12/25/1362511.html" target="_blank">GridView導出為Excel後,導出的.xls檔案無法作為源檔案導入的問題</a>

今天有人問我,如果Girdview模闆列裡使用了自定義控件,那導出的時候如何處理?

比如該自定義控件包含一個Dropdownlist和三個Label控件,其中用來在頁面上顯示資料的是其中一個Label控件,現在的問題是,如果不在PrepareControlForExport()中對該自定義控件進行處理,那麼導出的Excel檔案的對應Gridview中使用了自定義控件的列的内容全部相同(為Dropdownlist控件的第一個Item),但是對該自定義控件進行處理的話,不知道該如何才能正确的取出它的值(用來顯示的label中的值),試圖無法把自定義控件轉換成Dropdowlist和Label中的任何一種,但強制轉換的話運作到該語句會報錯。

這一段代碼是周遊傳入control的所有子control,對于每一個子control,根據子control的類型生成一個LiteralControl,并用這個LiteralControl代替目前的子control。對于LinkBtton,使用它的文本代替,對于ImagaButton,是使用它的Alternate文本代替。函數針對LinkButton, ImageButton, HyperLink, DropDwonList, CheckBox做了處理,如果目前控件不是這其中的任何一種,就判斷是否有子控件,并遞歸調用。

回到我們之前的問題,如果GridView中有一個自定義的控件,那我們怎麼辦?其實解決的辦法就按原思路來就可以,判斷是不是自定義控件,使用某種方式把這個自定義控件中的某個希望導出的文本資訊讀取出,轉換為一個Literal control就可以。

我們可以寫一個函數來處理這種比較複雜的情況,示範代碼如下:

至于GetLiteralControler的寫法,可以周遊自定義控件中的所有子控件,根據控件的特點,比如位置,ID標明一個控件,轉換為Literal控件并傳回。

本文是個随筆,記錄了一下思路,沒有進行實際檢驗,如果問題,還請大家指出,逐漸充實。

繼續閱讀