В моем приложении 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>");
}
}
Я просто понял, что когда я удаляю OnSorting = «GridView1_Sorting» и AllowSorting = «true» в gridview на странице abc.aspx, я получаю лист excel только с gridview. Только когда у меня есть эти два разрешения, возникает проблема .Пожалуйста, помогите ! – Ankita