在启用分页的情况下将GridView导出到Excel

时间:2015-11-18 16:42:09

标签: 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 + ".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 + "%' ";

    }
  }

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如何在ObjectData Source上运行另一个查询并将该结果集发送到另一个方法来导出数据。

下面的方法接受数据表,将其绑定到数据网格对象并导出它。

 public virtual T GetById(IdType id)
 {
    return GetAll().FirstOrDefault(x => x.ID == id);
 }
 public virtual IQueryable<T> GetAll()
 {
   return entities = context.Set<T>();
 }