Link to home
Start Free TrialLog in
Avatar of silterra
silterraFlag for Malaysia

asked on

Export records from gridview to microsoft excel problem

Hi Experts,

I was tried export data in gridview to excel. I encounter error called 'Exception of type 'System.OutOfMemoryException' was thrown.'
Kindly guide me on how to solve this issue.
Pls refer attached code.
Thks.
protected void Button1_Click(object sender, EventArgs e) 
    { 
        this.GridView1.AllowPaging = false; 
        this.GridView1.DataBind(); 
 
        GridViewExportUtil.Export("M2ReportInternal.xls", this.GridView1); 
    } 
 
public class GridViewExportUtil 
{ 
     
    public static void Export(string fileName, GridView gv) 
    { 
        HttpContext.Current.Response.Clear(); 
        HttpContext.Current.Response.AddHeader( 
            "content-disposition", string.Format("attachment; filename={0}", fileName)); 
        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) 
                { 
                    GridViewExportUtil.PrepareControlForExport(gv.HeaderRow); 
                    table.Rows.Add(gv.HeaderRow); 
                } 
 
                //  add each of the data rows to the table 
                foreach (GridViewRow row in gv.Rows) 
                { 
                    GridViewExportUtil.PrepareControlForExport(row); 
                    table.Rows.Add(row); 
                } 
 
                //  add the footer row to the table 
                if (gv.FooterRow != null) 
                { 
                    GridViewExportUtil.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(); 
            } 
        } 
    } 
 
    /// <summary> 
    /// Replace any of the contained controls with literals 
    /// </summary> 
    /// <param name="control"></param> 
    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()) 
            { 
                GridViewExportUtil.PrepareControlForExport(current); 
            } 
        } 
    } 
}

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of muhammadyasir
muhammadyasir
Flag of Pakistan image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial