我有一個從後面的代碼填充的gridview,並有大約300行。當我嘗試訪問包含它的頁面時,一切都會加載,然後大約5秒鐘後,程序退出並顯示以下錯誤消息: 如果按下繼續,應用程序將停止運行。但是,當我查看頁面時,所有數據都已加載到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行加載沒有問題,並且頁面仍處於活動狀態。問題在於編輯列對我的頁面至關重要,所以這不是一個可行的解決方案。
我已經看過滾動分頁,但我找不到一個例子/演示完全符合我的需求或足夠簡單,讓我遵循(我幾乎是一個完整的初學者)。我也不認爲應該有必要實行分頁;如果頁面需要幾秒鐘才能加載,那沒問題。我真正的問題在於導致會話退出的堆棧溢出。我不知道是什麼導致這種情況發生的編輯列,但不知何故,我需要解決這個問題,以便訪問此頁面不會退出整個會話。如果這是唯一的選擇,我願意在卷軸上添加分頁,但正如我所說,我還沒有弄清楚。我也不確定它會解決問題。我很高興發佈任何其他代碼等,如果它在所有幫助!
我需要我的專欄是因爲自動生成的,這取決於屏幕大小,將顯示不同的列(我在表格中有5-10列)。我還需要雙編輯列,因爲DataTable的編輯列包含網址的HTML,如下所示:編輯,所以如果我讓它自動生成,文本文本出現,而是我希望它成爲一個鏈接。因此,我使用表中的數據在頁面中創建鏈接列,然後再從表中刪除列。這是我能找到的唯一解決方案。 – issharp