C# 将GridView导出到启用分页的Excel
我已启用从C# 将GridView导出到启用分页的Excel,c#,asp.net,gridview,C#,Asp.net,Gridview,我已启用从GridView导出到Excel,如下所示: private void ExportGridToExcel() { Response.Clear(); Response.Buffer = true; Response.ClearContent(); Response.ClearHeaders(); Response.Charset = ""; string FileName = "BU Results" + DateTime.Now +
GridView
导出到Excel,如下所示:
private void ExportGridToExcel()
{
Response.Clear();
Response.Buffer = true;
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = "";
string FileName = "BU Results" + DateTime.Now + ".xls";
StringWriter strwritter = new StringWriter();
HtmlTextWriter htmltextwrtter = new HtmlTextWriter(strwritter);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
GridView1.GridLines = GridLines.Both;
GridView1.HeaderStyle.Font.Bold = true;
GridView1.RenderControl(htmltextwrtter);
Response.Write(strwritter.ToString());
Response.End();
}
protected void Button3_Click(object sender, EventArgs e)
{
ExportGridToExcel();
}
这很好——唯一的问题是,当我启用分页时,它一次只导出一个页面,并且在底部包含页面超链接。
因此,我尝试通过将此代码添加到我的ExportGridToExcel
来修复它:
GridView1.AllowPaging = false;
GridView1.DataBind();
这确实消除了导出中的分页,但是我还应用了一些过滤器,然后在导出中删除这些过滤器,因此它导出整个GridView
表,而不是过滤的数据
这是如何过滤GridView的:
protected void Button1_Click(object sender, EventArgs e)
{
ViewState.Add("test", true);
if (DropDownList1.SelectedValue.ToString() == "Name")
{
ObjectDataSource1.FilterExpression = "Name LIKE '%" + TextBox1.Text + "%' ";
}
else if (DropDownList1.SelectedValue.ToString() == "Department")
{
ObjectDataSource1.FilterExpression = "Department LIKE '%" + TextBox1.Text + "%' ";
}
}
有什么建议吗?在ObjectData源上运行另一个查询,并将结果集发送到另一个方法以导出数据 下面的方法接受数据表,将其绑定到数据网格对象并导出它
public static void ExportGrid(TBL_CONDORDataTable dt, string filename)
{
try
{
HttpResponse response = HttpContext.Current.Response;
// first let's clean up the response.object
response.Clear();
response.Charset = "";
// set the response mime type for excel
response.ContentType = "application/vnd.ms-excel";
response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
// create a string writer
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// instantiate a datagrid
DataGrid dg = new DataGrid();
dg.DataSource = dt;
dg.DataBind();
dg.RenderControl(htw);
response.Write(sw.ToString());
response.End();
}
}
}
catch (Exception ex)
{ string msg = ex.Message.ToString(); }
}
}
其主要思想是,在调用数据绑定之前,需要在ExportGridToExcel方法中重新应用这些过滤器。您的代码示例没有显示正在应用的过滤器(我假设选择参数)。如果您不想再次获取数据,您可以缓存所选数据并在导出中绑定到该数据。谢谢,在绑定之前重新应用了筛选器,并且可以正常工作。您是说我的评论值得加1吗?:)