Export current grid data

I use this code to export gridview data. I have a dropdown on my page, and when I select the dropdown values, the data changes in gridview, and I need to export only that data to excel.

protected void ExporttoExcel(object sender, EventArgs e)
{
    Response.Clear();
    Response.AddHeader("content-disposition", "attachment; filename=Report.xls");
    Response.ContentType = "application/vnd.xls";
    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    GridView1.RenderControl(htmlWrite);
    Response.Write(stringWrite.ToString());
    Response.End();   
}

I use paging, and when I export initially without selecting the values ​​of the drop-down list, I need to export all the data, but now only the data on the first page is exported.

Can someone fix me where I'm wrong?

+4
source share
3 answers

excels Datatable-Gridvieww. , Datatable, Gridview ( )

private void ExportToExcel(DataTable table, GridView gv)
    {

        Response.ClearContent();
        Response.Charset = your charset//"Windows-1253";
        Response.ContentEncoding = your encoding//Encoding.UTF8;
        string attachment = "attachment; filename=test.xls";
        Response.AddHeader("content-disposition", attachment);
        Response.ContentType = "application/ms-excel";
        HttpContext.Current.Response.Write(@"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">");

        HttpContext.Current.Response.Write("<font style='font-size:10.0pt; font-family:Calibri;'>");
        HttpContext.Current.Response.Write("<BR><BR><BR>");
        HttpContext.Current.Response.Write("<Table border='1' bgColor='#ffffff' " +
          "borderColor='#000000' cellSpacing='0' cellPadding='0' " +
          "style='font-size:10.0pt; font-family:Calibri; background:white;'> <TR>");
        int columnscount = table.Columns.Count;

        for (int j = 0; j < columnscount; j++)
        {
            HttpContext.Current.Response.Write("<Td style='background-color: #C0C0C0;' align=" + "center" + ">");
            HttpContext.Current.Response.Write("<B>");
            HttpContext.Current.Response.Write(table.Columns[j].ToString());
            HttpContext.Current.Response.Write("</B>");
            HttpContext.Current.Response.Write("</Td>");
        }
        HttpContext.Current.Response.Write("</TR>");
        foreach (DataRow row in table.Rows)
        {
            HttpContext.Current.Response.Write("<TR>");
            for (int i = 0; i < table.Columns.Count; i++)
            {
                HttpContext.Current.Response.Write("<Td align=" + "center" + ">"); ;
                HttpContext.Current.Response.Write(row[i].ToString());
                HttpContext.Current.Response.Write("</Td>");
            }

            HttpContext.Current.Response.Write("</TR>");
        }
        HttpContext.Current.Response.Write("</Table>");
        HttpContext.Current.Response.Write("</font>");
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.End();
    }
0

SQL- DataTable DataTable ViewState . , , DataTable ViewState GridView, DataTable .

- :

   protected void ExporttoExcel(object sender, EventArgs e)
   {
       //First, retrieve the DataTable from ViewState
       DataTable Dt = new DataTable();
       Dt = (DataTable)ViewState["DtData"];

       //Now you have the data, create a dummy GridView that will be used for exporting
       GridView grdView = new GridView();
       grdView.AllowPaging = false;
       grdView.DataSource = Dt;
       grdView.DataBind();

       //Do the Exporting stuff
       Response.Clear();
       Response.AddHeader("content-disposition", "attachment; filename=Report.xls");
       Response.ContentType = "application/vnd.xls";
       System.IO.StringWriter stringWrite = new System.IO.StringWriter();
       System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
       grdView.RenderControl(htmlWrite);
       Response.Write(stringWrite.ToString());
       Response.End();
   }

, , , SQL- , ViewState .

, GridView, .

, .

0

Turn off GridViewpaging, and then render. You might also need a binding.

protected void ExporttoExcel(object sender, EventArgs e)
{
    Response.Clear();
    Response.AddHeader("content-disposition", "attachment; filename=Report.xls");
    Response.ContentType = "application/vnd.xls";
    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

    // ************************
    GridView1.AllowPaging = false; // <- disable paging then render
    // also do the binding
    GridView1.DataSource = myDataSource;
    GridView1.DataBind();
    // ************************

    GridView1.RenderControl(htmlWrite);
    Response.Write(stringWrite.ToString());
    Response.End();
}

Edit (working example)

ASPX ( GridViewand export Button):

<asp:GridView ID="grd1" runat="server" AllowPaging="true" PageSize="10" AutoGenerateColumns="false" OnPageIndexChanging="grd1_PageIndexChanging">
    <Columns>
        <asp:BoundField DataField="StudentID" HeaderText="Student ID" />
        <asp:BoundField DataField="StudentName" HeaderText="Student Name" />
        <asp:BoundField DataField="FatherName" HeaderText="Father Name" />
    </Columns>
</asp:GridView>
<asp:Button ID="btnExport" runat="server" Text="Export" OnClick="btnExport_Click" />

Code for:

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        this.BindGridView();
    }
}

private void BindGridView()
{
    using (var dtStudent = this.GetStudentData())
    {
        this.grd1.DataSource = dtStudent;
        this.grd1.DataBind();
    }
}

private DataTable GetStudentData()
{
    var dtStudent = new DataTable();
    dtStudent.Columns.Add("StudentID");
    dtStudent.Columns.Add("StudentName");
    dtStudent.Columns.Add("FatherName");

    for (int i = 0; i < 20; i++)
    {
        var sIndex = i.ToString("00");
        dtStudent.Rows.Add("Student-" + sIndex, "Name-" + sIndex, "Father-" + sIndex);
    }

    return dtStudent;
}

protected void grd1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    this.grd1.PageIndex = e.NewPageIndex;
    this.BindGridView();
}

protected void ExporttoExcel()
{
    Response.Clear();
    Response.AddHeader("content-disposition", "attachment; filename=Report.xls");
    Response.ContentType = "application/vnd.xls";
    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

    // ************************
    this.grd1.AllowPaging = false; // <- disable paging then render
    this.BindGridView();
    // ************************

    this.grd1.RenderControl(htmlWrite);
    Response.Write(stringWrite.ToString());
    Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
    //base.VerifyRenderingInServerForm(control);
}

protected override void Render(HtmlTextWriter writer)
{
    if (this._Export)
        this.ExporttoExcel();
    else
        base.Render(writer);
}

private bool _Export = false;

protected void btnExport_Click(object sender, EventArgs e)
{
    this._Export = true;
}
-1
source

Source: https://habr.com/ru/post/1540695/


All Articles