提问者:小点点

在用户控件中导出网格数据以在按钮单击时表现出色


我有一个带有网格的用户控件。现在我在网格上方的同一用户网格上添加了一个导出到Excel按钮,使用户能够将相应的网格数据导出到Excel。我在用户控件中的按钮单击甚至t上编写了以下函数。

protected void Home_ExportExcel_Click(object sender, EventArgs args)
    {
        DataTable resultTbl = new DataTable();
        if (this.HomeGridDataSource != null)
            resultTbl = this.HomeGridDataSource as DataTable;
        Download(resultTbl, this.MasterPage.CurrentLibrary);
    }

下载功能是

private void Download(DataTable tb)
    {
        string attachment = "attachment; filename=HomeGridData" + DateTime.Now.ToString() + ".xls";
        Response.ClearContent();
        Response.AddHeader("content-disposition", attachment);
        Response.ContentType = "application/vnd.ms-excel";
        string tab = "";
        foreach (DataColumn dc in tb.Columns)
        {
            Response.Write(tab + dc.ColumnName);
            tab = "\t";
        }
        Response.Write("\n");
        int i;
        foreach (DataRow dr in tb.Rows)
        {
            tab = "";
            for (i = 0; i < tb.Columns.Count; i++)
            {
                Response.Write(tab + dr[i].ToString());
                tab = "\t";
            }
            Response.Write("\n");
        }
        Response.End();
    }

现在我以文本格式获得请求的响应,但我需要将其与 Grid 数据一起下载到用户机器。

我还尝试使用Excel样式等生成.xml文件,但我在响应对象中得到了与文本格式相同的结果,但我希望它能被下载。

我在这里缺少什么?


共1个答案

匿名用户

将内容类型设置为Excel文件不足以让客户端将响应视为Excel文件。您的服务器通过文本信息进行响应,这些信息被客户端视为常见响应。即使用户将您的响应保存到Excel文件,该文件也不会符合格式,因为它是文本。解决这个问题的更好方法是使用某些库生成Excel文件。例如。,EPPlus。使用该库,您可以在内存中生成Excel文件(无需在磁盘上创建物理文件),然后使用响应. OutputStream. Writ将其作为流返回。以下主题中是如何通过流\文件响应的一个很好的例子。