2016-07-14 5 views
0

私はグリッドビューを持っています。グリッドビューはコードの後ろに配置され、約300行あります。それを含むページにアクセスしようとすると、すべてがロードされ、約5秒後にプログラムが終了し、このエラーメッセージが表示されます。 enter image description here [続行]を押すと、アプリケーションは実行を停止します。しかし、私はページを見ると、すべてのデータがグリッドビューにロードされています(もちろん、セッションが停止しているので、私のリンクなどは動作しません)。Loading 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ですか?それは何をするでしょうか?

GridViewに1つ追加されているため、2つの編集列が表示されている場合は、データをバインドするときに2番目の列を追加しています。 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> 

はあなたのコメント欄にでHTMLに置くために、私はに応じて、私の列が自動ために生成する必要が

OnRowDataBound="GridView1_RowDataBound" 
+0

を取り除くTemplateFieldを使用することができます画面のサイズ、異なる列が表示されます(私はテーブルに5-10の列を持っています)。 DataTableの編集列には、次のようなURLのHTMLが含まれているため、二重編集列も必要です。編集すると、自動生成されたままにしておくと、リテラルテキストが表示されますが、その代わりにリンクにしたいときに使用します。だから、私はテーブルのデータを持つページのリンク列を作成して、後でテーブルから列を削除しています。私が見つけることができる唯一の解決策です。 – issharp