Wijmo 更優美的jQuery UI部件集:導出Wijmo的GridView到Excel

Wijmo GridView 控件不提供導出Excel文件的方法。本篇博客介紹一種將Wijmo的GridView控件保存到Excel的簡單方法。你可以使用同樣的方法在C1 WebUI GridView上。

 

步驟1 : C1GridView綁定至數據源

第一步是將C1GridView綁定到數據源。爲了簡單起見,我們將其綁定到C1Nwind.mdb的Customers表。

image

 

步驟2 : 導出C1GridView Excel

導出到Excel需要分成兩步。第一步是將GridView保存至一個HTML字符串。

Web控件有一個RenderControl()方法可以將服務器端控件的內容輸出到指定的HtmlTextWriter對象。如果啓用了Tracing,該方法還將存儲控件的Trace信息。然後該HtmlTextWriter對象輸出到一個StringWriter 對象。

下面的方法被用來創建一個字符串:

 

  1. Public Function DataGridToExcel(ByVal dgExport As C1.Web.Wijmo.Controls.C1GridView.C1GridView) As String 
  2.  
  3.     '創建一個stringwriter 
  4.  
  5.     Dim stringWrite As New System.IO.StringWriter() 
  6.  
  7.     '創建一個使用該stringwriter的htmltextwriter 
  8.  
  9.     Dim htmlWrite As New System.Web.UI.HtmlTextWriter(stringWrite) 
  10.  
  11.     Dim dg As C1.Web.Wijmo.Controls.C1GridView.C1GridView 
  12.  
  13.     'just set the input datagrid = to the new dg grid 
  14.  
  15.     dg = dgExport 
  16.  
  17.     '將header的字體加粗 
  18.  
  19.     dg.HeaderStyle.Font.Bold = True 
  20.  
  21.     '如果需要,這裏是在組件級別改變顏色/格式 
  22.  
  23.     dg.HeaderStyle.ForeColor = System.Drawing.Color.Black 
  24.  
  25.     dg.RowStyle.ForeColor = System.Drawing.Color.Black 
  26.  
  27.     '綁定修改後的datagrid 
  28.  
  29.     '告訴datagrid將自己呈現到我們提供的htmltextwriter 
  30.  
  31.     dg.AllowSorting = False 
  32.  
  33.     dg.AllowPaging = False 
  34.  
  35.     dg.AllowCustomPaging = False 
  36.  
  37.     '新的代碼 
  38.  
  39.     Dim parent As Control = dg.Parent 
  40.  
  41.     parent.Controls.Remove(dg) 
  42.  
  43.     dg.RenderControl(htmlWrite) 
  44.  
  45.     '新的代碼 
  46.  
  47.     parent.Controls.Add(dg) 
  48.  
  49.     '輸出HTML 
  50.  
  51.     Return stringWrite.ToString() 
  52.  
  53. End Function 

 

 

image

 

下一步,我們將在一個Button Click事件中調用這個DownloadToExcel 方法從保存的字符串創建一個excel文件。

 

  1. Public Sub DownloadToExcel(ByVal content As StringByVal response As HttpResponse) 
  2.  
  3. '清理 response.object 
  4.  
  5. response.Clear() 
  6.  
  7. response.Buffer = True 
  8.  
  9. response.Charset = "" 
  10.  
  11. '設置響應的MIME類型爲excel 
  12.  
  13. response.ContentType = "application/vnd.ms-excel" 
  14.  
  15. response.ContentEncoding = New System.Text.UTF8Encoding() 
  16.  
  17. response.Write(content) 
  18.  
  19. response.End() 
  20.  
  21. End Sub 

 

 image

 

實現時的問題

在相當多的情況下,你會在導出時遇到一些錯誤。你可能會收到一條錯誤信息:“RegisterForEventValidation 只能在Render()過程中被調用;”。在這種情況下,請嘗試以下方法:


1. 你可以向下面的文章描述的那樣,重載VerifyRenderingInServerForm 方法:

http://connect.microsoft.com/VisualStudio/feedback/details/118285/rendercontrol-doesnt-work-for-gridview

Public Overrides Sub VerifyRenderingInServerForm(control As Control)

End Sub

 

2. 爲了避免收到“RegisterForEventValidation 只能在Render()過程中被調用;”異常,可以關閉Page.EnableEventValidation 或者將RenderControl方法調用放置在一個try-catch塊中。

此外,如果gridview包含一個複選框或者一個模板列,你會收到上面的錯誤。目前已發現微軟發佈的GridView會發生同樣的錯誤。由於C1GridView繼承自微軟發佈的GridView,所以它是C1GridView的已知設計問題。

 

下載示例 

 

Wijmo下載,請進入Studio for ASP.NET Wijmo 2012 v1正式發佈(2012.03.22更新)!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章