2013-07-08 50 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()函数类似。

自从最近2天以来,我一直在使用这个东西,但是对我的应用程序来说没有任何工作。

请帮忙! 提前谢谢!

改变了我的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

我刚刚意识到,当我在abc.aspx页面的gridview中删除OnSorting =“GridView1_Sorting”和AllowSorting =“true”时,我得到的只有gridview的excel表格。只有当我启用这两个时,问题才会出现请帮助 ! – Ankita

回答

2

我已经解决了这个问题。我意识到问题出在我的gridview的AllowSorting功能。我关闭了该页面的eventvalidation。

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

这工作!

+0

这也适用于我。 @Ankita你应该把它标记为答案。 – Doreen

0

我觉得你在你Export ToExcel()函数的顶部需要Response.Clear()

+0

我编辑了我的ExportToExcel(已编辑我的问题)函数stil的东西不工作,我该怎么办? – Ankita

相关问题