2016-07-14 84 views
0

我有一個從後面的代碼填充的gridview,並有大約300行。當我嘗試訪問包含它的頁面時,一切都會加載,然後大約5秒鐘後,程序退出並顯示以下錯誤消息: enter image description here 如果按下繼續,應用程序將停止運行。但是,當我查看頁面時,所有數據都已加載到gridview中(但當然,由於會話已停止,我的鏈接等無法工作)。加載Gridview

如果我在填充gridview的表中填入較少的數據,我不會收到錯誤(它可以處理大約30行 - 我不確定數據太多的確切點)。無論如何,由於它是完全相同的代碼,但數據量少,我知道我實際上並沒有像消息所暗示的那樣有無限循環或無限遞歸。

這裏是GridView控件的HTML:

<div id="dvGrid" class="gridTable"> 
    <asp:GridView runat="server" ID="GridView1" OnRowDataBound="GridView1_RowDataBound"> 
    <Columns> 
     <asp:BoundField DataField="Edit" HtmlEncode="false" HeaderText="" HeaderStyle-Wrap="false" SortExpression="Edit" /> 
    </Columns> 
    </asp:GridView> 
</div> 

這裏是它背後的代碼填充(這是在Page_Load方法):

DataTable dt = OpenWeather10Day.DBQueries.GetHistoricalData(_Zip); 
dt.Columns["Date"].SetOrdinal(0); 
GridView1.DataSource = dt; 
_LinkColIndex = dt.Columns["Edit"].Ordinal; 
_CommentsColIndex = dt.Columns["Comments"].Ordinal; 
GridView1.DataSource = dt.DefaultView; 
GridView1.DataBind(); 

這裏是OnRowDataBound功能:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    {//remove double edit column and add a div in comments column to make it the correct size 
     TableCell cell = e.Row.Cells[0]; 
     e.Row.Cells.RemoveAt(0); 
     e.Row.Cells.RemoveAt(_LinkColIndex); 
     e.Row.Cells.Add(cell); 
     if (e.Row.RowType == DataControlRowType.DataRow) { 
      TableCell commentsCell = e.Row.Cells[_CommentsColIndex]; 
      HtmlGenericControl div = new HtmlGenericControl("DIV"); 
      div.Attributes.Add("class", "innerDiv"); 
      div.InnerHtml = commentsCell.Text; 
      commentsCell.Text = string.Empty; 
      commentsCell.Controls.Add(div); 
     } 
    } 

我發現錯誤是與我的「編輯」列。如果我從表格中刪除編輯列並刪除所有與之相關的代碼,所有300行加載沒有問題,並且頁面仍處於活動狀態。問題在於編輯列對我的頁面至關重要,所以這不是一個可行的解決方案。

我已經看過滾動分頁,但我找不到一個例子/演示完全符合我的需求或足夠簡單,讓我遵循(我幾乎是一個完整的初學者)。我也不認爲應該有必要實行分頁;如果頁面需要幾秒鐘才能加載,那沒問題。我真正的問題在於導致會話退出的堆棧溢出。我不知道是什麼導致這種情況發生的編輯列,但不知何故,我需要解決這個問題,以便訪問此頁面不會退出整個會話。如果這是唯一的選擇,我願意在卷軸上添加分頁,但正如我所說,我還沒有弄清楚。我也不確定它會解決問題。我很高興發佈任何其他代碼等,如果它在所有幫助!

回答

0

你能解釋一下你的編輯列嗎?它是一個Url,預先格式化的HTML嗎?它會做什麼?

您正在看到2編輯列,因爲您的GridView中已添加了一列,則在綁定數據時添加第二列。使用AutoGenerateColumns屬性來防止這種情況,然後添加到其他列中。

<asp:GridView runat="server" ID="GridView1" 
    AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="Edit" HeaderText="Edit" /> 
     <asp:BoundField DataField="Date" HeaderText="Date" /> 
     <asp:TemplateField HeaderText="Comments"> 
      <ItemTemplate> 
       <div class="innerDiv"> 
        <%# Eval("Comments") %> 
       </div> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

可以使用TemplateField把在HTML到您的評論欄,並擺脫

OnRowDataBound="GridView1_RowDataBound" 
+0

我需要我的專欄是因爲自動生成的,這取決於屏幕大小,將顯示不同的列(我在表格中有5-10列)。我還需要雙編輯列,因爲DataTable的編輯列包含網址的HTML,如下所示:編輯,所以如果我讓它自動生成,文本文本出現,而是我希望它成爲一個鏈接。因此,我使用表中的數據在頁面中創建鏈接列,然後再從表中刪除列。這是我能找到的唯一解決方案。 – issharp