为 excel 导出 VB.net 禁用数据网格排序
Disabling Datagrid Sort for excel export VB.net
在这个问题上纠结了一段时间,现在终于将范围缩小到 AllowSorting
是 True
。当我尝试 运行 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()
在这个问题上纠结了一段时间,现在终于将范围缩小到 AllowSorting
是 True
。当我尝试 运行 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()