加载Gridview

时间:2016-07-14 14:08:56

标签: c# asp.net gridview

我有一个从后面的代码填充的gridview,有大约300行。当我尝试访问包含它的页面时,所有内容都会加载,然后大约5秒钟后,程序退出并显示以下错误消息: enter image description here 如果我按继续,应用程序将停止运行。但是,当我查看页面时,所有数据都已加载到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行加载都没有问题,页面仍处于活动状态。问题是编辑列对我的页面至关重要,因此这不是一个可能的解决方案。

我已经在滚动中查看了分页,但我找不到一个完全符合我需要的示例/演示,或者对我来说足够简单(我几乎是一个完整的初学者)。我也认为没有必要实施分页;如果页面需要几秒钟才能加载,这没关系。我真正的问题/问题是堆栈溢出导致会话退出。我不知道导致这种情况发生的编辑列是什么,但不知何故我需要修复此问题,以便访问此页面不会退出整个会话。如果它是唯一的选择,我愿意在滚动上添加分页,但就像我说的那样,我还没有弄明白。我也不确定它会解决这个问题。我很乐意发布任何其他代码等,如果它有用的话!

1 个答案:

答案 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"