2013-07-08 3 views
0

В моем приложении C# я генерирую Gridview с входа пользователя, а затем я должен предоставить пользователю возможность экспортировать Gridview на лист excel.Экспорт в Excel экспортирует всю веб-страницу, а не только gridview (Сортировка включена)

Вот моя abc.aspx страница:

<body> 
    <form id="form1" runat="server"> 
     <div> 
      <b>Enter p1 :</b> 
      <asp:TextBox ID="tb_P1" runat="server" /> 
      <br /> 

      <b>Enter p2 :</b> 
      <asp:TextBox ID="tb_P2" runat="server" /><br /> 



      <asp:Button ID="btn1" runat="server" OnClick="Button1_Click" Text="Start Search" ClientIDMode="Static" /> 
      <asp:Button ID="btn2" runat="server" OnClick="Button2_Click" Text="Export Data to Excel" /> 
      <hr /> 

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" 

         ShowFooter="false" 
         AllowSorting="true" 
         OnSorting="GridView1_Sorting" 
         EnableViewState="false" 
         ShowHeaderWhenEmpty="True" 
         AllowPaging="false"> 
         <RowStyle Wrap="false" /> 
         <HeaderStyle Wrap="false" /> 
        </asp:GridView>  
     </div> 

    </form> 
    <br /> 
</body> 

Вот моя страница .cs:

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Data; 
using System.Web.Script.Services; 
using System.Configuration; 
using System.Drawing; 
using System.Windows.Forms; 
using System.ComponentModel; 
using System.IO; 

public partial class pSearch : System.Web.UI.Page 
{ 
    SqlConnection sqlconn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString); 
    DataSet dsldata; 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void Button2_Click(object sender, EventArgs e) 
    { 

     string fname = filename.Text; 


     GridView1.DataSource = (DataSet)Session["data"]; 
     GridView1.DataBind(); 
     int rowCount = GridView1.Rows.Count; 
     if (rowCount == 0) 
     { 
      Response.Write("<script>alert('Result Empty!');</script>"); 
     } 
     else 
     { 
       ExportToExcel(GridView1, fname); 
     } 
    } 



    private void ExportToExcel(GridView GrdView, string fname) 
    { 

     try 
     { 
      Response.AddHeader("contentdisposition", "attachment;filename=test1.xls"); 
      Response.Charset = ""; 
      Response.ContentType = "application/vnd.xls"; 
      System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
      System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite); 
      GrdView.RenderControl(htmlWrite); 
      Response.Write(stringWrite.ToString()); 
      Response.End(); 
     } 
     catch (Exception ex) 
     { 
      Response.Write("<script>alert('" + ex.Message + "')</script>"); 
     } 
    } 
    public override void VerifyRenderingInServerForm(System.Web.UI.Control control) 
    { 
    } 


    protected void Button1_Click(object sender, EventArgs e) 
    { 

     string Rname= Page.Request.QueryString["rname"]; 
     string typeofquery = "my command"; 

     string abc = null; 
     abc = "" + typeofquery + " @RName='" + RName "'"; 

     SqlDataAdapter cmdldata = new SqlDataAdapter(abc, sqlconn); 
     cmdldata.SelectCommand.CommandTimeout = 600; 
     dsldata = new DataSet(); 

     try 
     { 
      cmdldata.Fill(dsldata); 
      Session["data"] = dsldata; 
      GridView1.DataSource = dsldata; 
      GridView1.DataBind(); 
     }//end of try 
     catch (Exception ex) 
     { 

      Response.Write(ex); 

     }//end of catch 

    } 

    private const string ASCENDING = " ASC"; 
    private const string DESCENDING = " DESC"; 


    public SortDirection GridViewSortDirection 
    { 
     get 
     { 
      if (ViewState["sortDirection"] == null) 
       ViewState["sortDirection"] = SortDirection.Ascending; 

      return (SortDirection)ViewState["sortDirection"]; 
     } 
     set { ViewState["sortDirection"] = value; } 
    } 


    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     string sortExpression = e.SortExpression; 

     if (GridViewSortDirection == SortDirection.Ascending) 
     { 
      GridViewSortDirection = SortDirection.Descending; 
      SortGridView(sortExpression, DESCENDING); 
     } 
     else 
     { 
      GridViewSortDirection = SortDirection.Ascending; 
      SortGridView(sortExpression, ASCENDING); 
     } 

    } 

    private void SortGridView(string sortExpression, string direction) 
    { 
     dsldata = (DataSet)HttpContext.Current.Session["data"]; 
     DataTable dt = dsldata.Tables[0]; 
     DataView dv = new DataView(dt); 
     dv.Sort = sortExpression + direction; 
     dt = dv.ToTable(); 
     DataSet ds1 = new DataSet("table"); 
     ds1.Tables.Add(dt); 
     Session["data"] = ds1; 
     GridView1.DataSource = dv; 
     GridView1.DataBind(); 
    } 

} 

Я сортировкой включен в моей GridView. Проблема в том, что вся моя веб-страница экспортируется на лист excel. Я хочу, чтобы экспортировалось только мое представление сетки. Сортировка работает правильно, и я получаю новую отсортированную таблицу на моем листе excel, но она есть со всей веб-страницей. Я искал решение в разных местах в Интернете. Кажется, что многие люди столкнулись с этой проблемой. Я также пробовал свои решения, такие как , изменяя Response.ContentType = "application/vnd.xls"; до
Response.ContentType = "application/vnd.ms-excel"; и большинство других решений были аналогичны моей функции ExportToExcel().

Я занимаюсь этим с двух последних дней, но ничего не работает для моего приложения.

Пожалуйста, помогите! Спасибо заранее!

Изменено моя функция ExporttoExcel

private void ExportToExcel(GridView GrdView, string fname) 
{ 

try 
{ 

    Response.Clear(); 
    Response.AddHeader("content-disposition", "attachment;filename=" + fname + ".xls"); 
    Response.Charset = ""; 
    Response.ContentType = "application/vnd.ms-excel"; 
    StringWriter stringWrite = new StringWriter(); 
    HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 
    GridView1.RenderControl(htmlWrite); 
    Response.Write(stringWrite.ToString()); 
    Response.End(); 
} 
catch (Exception ex) 
{ 
    Response.Write("<script>alert('" + ex.Message + "')</script>"); 
} 
} 
+0

Я просто понял, что когда я удаляю OnSorting = «GridView1_Sorting» и AllowSorting = «true» в gridview на странице abc.aspx, я получаю лист excel только с gridview. Только когда у меня есть эти два разрешения, возникает проблема .Пожалуйста, помогите ! – Ankita

ответ

2

Я решил эту проблему. Я понял, что проблема была в функции AllowSorting моего gridview.I отключил eventvalidation этой страницы.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="abc.aspx.cs" Inherits="abc" EnableEventValidation = "false" %> 

Это сработало!

+0

Это сработало и для меня. @Ankita вы должны отметить это как ответ. – Doreen

0

Я думаю, что вам нужно Response.Clear() в верхней части Export ToExcel() функции.

+0

Я отредактировал мой ExportToExcel (отредактировал мой вопрос). Функция stil не работает. Что делать? – Ankita