为 excel 导出 VB.net 禁用数据网格排序

Disabling Datagrid Sort for excel export VB.net

在这个问题上纠结了一段时间,现在终于将范围缩小到 AllowSortingTrue。当我尝试 运行 excel 导出排序时,excel 打开一个没有任何网格线的空白文档。将其关闭,数据按预期显示。我认为如果我在 excel 导出按钮单击事件中关闭排序,然后再将其重新打开,这将解决问题,但似乎并非如此。

我也试过改变我关闭页面排序的位置,只是为了确保我没有把它放在错误的位置,但似乎仍然没有改变空白页的结果。

以下是我使用的编码。我确实读过一些关于使用 BindingSource 的讨论,但这似乎对我也不起作用。

我是漏掉了一步还是做错了什么?

        Dim tw As New StringWriter()       
        Dim hw As New HtmlTextWriter(tw)
        Dim frm As HtmlForm = New HtmlForm()
        Response.ContentType = "application/vnd.ms-excel"
        Response.AddHeader("content-disposition", 
              "attachment;filename=" & "Facility Detail Report" & ".xls")
        Response.Charset = ""
        EnableViewState = False

        dgCustomers.AllowPaging = False
        dgCustomers.AllowSorting = False
        'Dim BindingSource As New BindingSource
        'BindingSource.DataSource = dgCustomers.DataSource()
        'dgCustomers.DataSource = BindingSource.DataSource
        dgCustomers.DataBind()

        Controls.Add(frm)
        frm.Controls.Add(dgCustomers)
        frm.RenderControl(hw)
        Response.Write(tw.ToString())
        Response.End()
        dgCustomers.AllowPaging = True
        dgCustomers.AllowSorting = True
        dgCustomers.DataBind()

好吧,我最终做的是将搜索中的 DataSet 放入会话变量中。然后将其用于发送到 excel 的虚拟数据网格。这样,如果需要,网站仍会按列排序,并且相同的数据仍会传输到 Excel。我觉得这在某种程度上是 "hack" 但无论我尝试什么,我都无法让真正的 datagrid 与打开和关闭 AllowSorting.[=14 一起工作=]

也许这会对遇到同样问题的其他人有所帮助。我花了太多时间环顾四周来解决本来应该非常简单的问题。我找到了几个很好的解决方案,但它们似乎并不适用于我的情况。希望这可以帮助处于类似情况的人花更少的时间来尝试让它工作。

Dim DummydgCustomers As New WebControls.DataGrid
            DummydgCustomers.DataSource = Session("dsCustomers").tables(0)
            DummydgCustomers.DataBind()

            HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"
            HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" & "Facility Detail Report" & ".xls")
            HttpContext.Current.Response.Charset = ""

            EnableViewState = False

            Dim sw As New StringWriter()
            Dim hw As New HtmlTextWriter(sw)

            DummydgCustomers.RenderControl(hw)
            HttpContext.Current.Response.Write(sw.ToString())
            HttpContext.Current.Response.End()