【问题标题】:Export GridView to Excel with paging enabled在启用分页的情况下将 GridView 导出到 Excel
【发布时间】:2015-11-18 16:42:09
【问题描述】:

我已经启用了从 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 + "%' ";

    }
  }

有什么建议吗?

【问题讨论】:

  • 主要思想是在调用数据绑定之前,需要在 ExportGridToExcel 方法中重新应用这些过滤器。您的代码示例未显示正在应用的过滤器(我假设选择参数)。如果您不想再次获取数据,您可以缓存选定的数据并在导出中绑定到该数据。
  • 谢谢,在绑定之前重新应用了过滤器,它可以工作了
  • 你是说我的评论值加 1 吗? :)

标签: c# asp.net gridview


【解决方案1】:

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

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

 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(); }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    相关资源
    最近更新 更多