在用户控件中导出网格数据以在按钮单击时优秀

时间:2016-12-19 03:26:45

标签: c# asp.net excel

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

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 个答案:

答案 0 :(得分:0)

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