我有一个从后面的代码填充的gridview,有大约300行。当我尝试访问包含它的页面时,所有内容都会加载,然后大约5秒钟后,程序退出并显示以下错误消息: 如果我按继续,应用程序将停止运行。但是,当我查看页面时,所有数据都已加载到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 :(得分: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"