Wijmo GridView does not provide a method to export excel file. This blog explains a simple approach to save Wijmo GridView in a excel file. You can use the same approach for C1WebUI GridView as well.
Step 1 : Bind C1GridView to a DataSource
The first step is to bind C1GridView with a datasource. For simplicity, we will bind it to Customers table of C1Nwind.mdb.
Step 2 : Export C1GridView to Excel
Exporting to excel is a two step process. First step is to save the gridview into a html string. Web controls have a RenderControl() method which outputs the server control content to a provided HtmlTextWriter object and stores tracing information about the control if tracing is enabled. This HtmlTextWriter is then output to a StringWriter object. Following method is used to create a string :
Public Function DataGridToExcel(ByVal dgExport As C1.Web.Wijmo.Controls.C1GridView.C1GridView) As String 'create a string writers Dim stringWrite As New System.IO.StringWriter() 'create an htmltextwriter which uses the stringwriter Dim htmlWrite As New System.Web.UI.HtmlTextWriter(stringWrite) Dim dg As C1.Web.Wijmo.Controls.C1GridView.C1GridView 'just set the input datagrid = to the new dg grid dg = dgExport 'Make the header text bold dg.HeaderStyle.Font.Bold = True 'If needed, here's how to change colors/formatting at the component level dg.HeaderStyle.ForeColor = System.Drawing.Color.Black dg.RowStyle.ForeColor = System.Drawing.Color.Black 'bind the modified datagrid 'tell the datagrid to render itself to our htmltextwriter dg.AllowSorting = False dg.AllowPaging = False dg.AllowCustomPaging = False 'new code Dim parent As Control = dg.Parent parent.Controls.Remove(dg) dg.RenderControl(htmlWrite) 'new code parent.Controls.Add(dg) 'output the html Return stringWrite.ToString() End Function
Next we will call the DownloadToExcel method on a button click to create excel file from the saved string.
Public Sub DownloadToExcel(ByVal content As String, ByVal response As HttpResponse) 'clean up the response.object response.Clear() response.Buffer = True response.Charset = "" 'set the response mime type for excel response.ContentType = "application/vnd.ms-excel" response.ContentEncoding = New System.Text.UTF8Encoding() response.Write(content) response.End() End Sub
In quite a few cases, you may face few errors while exporting. You may get an error message is "RegisterForEventValidation can only be called during Render();". In such a case please try the following approach : 1. You can overload the VerifyRenderingInServerForm method as described here : http://connect.microsoft.com/VisualStudio/feedback/details/118285/rendercontrol-doesnt-work-for-gridview
Public Overrides Sub VerifyRenderingInServerForm(control As Control) End Sub
2. To avoid the "RegisterForEventValidation can only be called during Render()" exception turn off the Page.EnableEventValidation or put the RenderControl call in a try-catch block. Also, if the gridview contains a checkbox or a template column, you will get the above error. This issue is observed with MS GridView as well. Since C1GridView inherit MSGridView, so it is a design behavior in C1GridView.