2016-03-15 36 views
0

一直在此问题上停留一段时间,现在最终缩小到AllowSortingTrue这一事实。当我尝试运行excel导出进行排序时,excel打开成没有任何网格线的空白文档。将其关闭,数据按预期显示。我认为,如果我关闭了excel导出按钮单击事件中的排序,然后再打开它,这将解决问题,但是这似乎并非如此。禁用Datagrid排序为excel导出VB.net

我也尝试转移关闭页面排序的位置,以确保我没有将其放置在错误的位置,但仍然没有改变空白页面的结果。

下面是我正在使用的编码。我确实读了一些关于使用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() 
+0

什么是HtmlForm?是某种第三方控制? –

+0

不,它是以下.Net描述的一部分“提供对服务器上的HTML

元素的编程访问。”我不太熟悉它,因为这是我第一次看到它。这是在我工作之前写的。花费大量的时间研究互联网关于这种方法的总体情况,基本上你看到的是每个人似乎都是这样做的。 – ggiaquin16

回答

0

清楚我落得这样做从搜索到一个会话变量把DataSet。然后将其用于发送到excel的虚拟数据网格。这样,如果网站需要,网站仍然按列排序,并且相同的数据仍然会传输到Excel。我觉得这是一个“黑客”的方式,但无论我尝试了什么,我都无法得到真正的datagrid来打开和关闭AllowSorting

也许这会帮助有相同问题的其他人。我花了很多时间四处寻找解决本应该非常简单的事情。我找到了几个很好的解决方案,但他们似乎没有适用于我的情况。希望这可以帮助穿着类似鞋子的人花费更少的时间尝试使用它。

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()