Click here to Skip to main content
15,868,164 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Hi

I need to export all the values from DataGrid to Excel. Below is my code

VB#
Protected Sub btnExportExcel_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnExportExcel.Click
       Response.Clear()

       Response.AddHeader("content-disposition", "attachment;filename=222222222.xls")

       Response.Charset = String.Empty

       Response.ContentType = "application/vnd.xls"

       Dim StringWriter As New System.IO.StringWriter()

       Dim HtmlTextWriter As New HtmlTextWriter(StringWriter)

       dglist.ShowHeader = False
       dglist.RenderControl(HtmlTextWriter)

       Response.Write(StringWriter.ToString())

       Response.[End]()


   End Sub

I am getting error as Control 'MainContent_dglist_ctl00_0' of type 'DataGridLinkButton' must be placed inside a form tag with runat=server"

tried sorting to false and others still I am getting same error.

Your help will be much appreciated.
Posted
Comments
Rob Grainger 26-May-13 8:48am    
We'll need more context to solve this, can you show us the .aspx containing your data grid.

It's probably just a matter of adding a runat='server' attribute to one of your tags, unfortunately the name we see (MainContent_dglist_ctl00_0) is generated by ASP.NET, so without seeing the aspx file its hard to tell where. Maybe someone else knows more about the structure of the auto-generated names.

Use the below code.Just use your gridview and you are done.(:doh: Convert this code to VB)


C#
protected void btnExcel_Click(object sender,EventArgs e)
        {
            GenerateExcel(Your GridView);//Pass your gridview to function
        }
        public override void VerifyRenderingInServerForm(Control control)
        {
            // Verifies that the control is rendered
        }        
        public static void GenerateExcel(GridView gv)
        {
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.AppendHeader("Content-disposition", "attachment; filename=Leave_Report.xls");
            HttpContext.Current.Response.ContentType = "application/ms-excel";

            using (StringWriter sw = new StringWriter())
            {
                using (HtmlTextWriter htw = new HtmlTextWriter(sw))
                {
                    //  Create a table to contain the grid
                    Table table = new Table();

                    //  include the gridline settings
                    table.GridLines = gv.GridLines;

                    //  add the header row to the table
                    if (gv.HeaderRow != null)
                    {
                        PrepareControlForExport(gv.HeaderRow);
                        table.Rows.Add(gv.HeaderRow);
                    }
                    //Make Header Coloruful

                    for (int j = 0; j < gv.Columns.Count; j++)
                    {
                        //Apply style to Individual Cells
                        gv.HeaderRow.Cells[j].Style.Add("background-color", "#4DB4EE");

                    }

                    //  add each of the data rows to the table
                    foreach (GridViewRow row in gv.Rows)
                    {
                        PrepareControlForExport(row);
                        table.Rows.Add(row);
                    }

                    //  add the footer row to the table
                    if (gv.FooterRow != null)
                    {
                        PrepareControlForExport(gv.FooterRow);
                        table.Rows.Add(gv.FooterRow);
                    }

                    //  render the table into the htmlwriter
                    table.RenderControl(htw);

                    //  render the htmlwriter into the response
                    HttpContext.Current.Response.Write(sw.ToString());
                    HttpContext.Current.Response.End();
                }
            }


        }
        private static void PrepareControlForExport(Control control)
        {
            for (int i = 0; i < control.Controls.Count; i++)
            {
                Control current = control.Controls[i];
                if (current is LinkButton)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
                }
                else if (current is ImageButton)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
                }
                else if (current is HyperLink)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
                }
                else if (current is DropDownList)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
                }
                else if (current is CheckBox)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
                }

                if (current.HasControls())
                {
                    PrepareControlForExport(current);
                }
            }
        }
 
Share this answer
 
v2
Please, use SearchBox[^] before you ask a question. There are thousends of examples...
Follow above link!
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900