2016-03-15 80 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()