如何阻止Gridview使用列标题上的超链接将数据导出到Excel?

时间:2017-01-27 18:50:41

标签: asp.net gridview

美好的一天,

我浏览了网络以寻求解决方案,但没有找到。

我们编写了一个代码,在Gridview上显示结果,并带有一个按钮,用于将数据导出到Excel电子表格。

Gridview启用了分页和排序。

但是,问题是导出的数据似乎在列标题上有超链接。

单击任何列标题时,会发生以下错误:

Microsoft Office已发现潜在的安全问题。 要保护您的计算机,请仅单击来自可信来源的链接...

有没有办法从Gridview将数据导出到Excel而没有列标题上的超链接?

2 个答案:

答案 0 :(得分:0)

您应该使用gridviewDataset来填充Datatable,而不是使用gridview来生成Excel文件。

这样做的代码就是。

public void ExportDataTableToExcel(DataTable dt, string filename)
    {
        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();
            }
        }

    }

您所要做的就是创建一个具有上述功能的类,并在页面代码中创建它的对象,并使用数据表和文件名称调用此函数。

答案 1 :(得分:0)

您的 ExportToExcel 函数可能对 HtmlTextWriter 执行 RenderControl。在调用该函数之前,您可以在 GridView 上关闭排序。不过,您还必须确保在此之后立即在 GridView 上调用 DataBind。顺序应该是:

' turn sorting off and call DataBind()
gvMyGridView.AllowSorting = False
gvMyGridView.DataBind()

' call your ExportToExcel function
ExportToExcel(gvMyGridView, "MyExport")

' turn sorting back on
gvMyGridView.AllowSorting = True