私はグリッドビューを持っています。グリッドビューはコードの後ろに配置され、約300行あります。それを含むページにアクセスしようとすると、すべてがロードされ、約5秒後にプログラムが終了し、このエラーメッセージが表示されます。 [続行]を押すと、アプリケーションは実行を停止します。しかし、私はページを見ると、すべてのデータがグリッドビューにロードされています(もちろん、セッションが停止しているので、私のリンクなどは動作しません)。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行すべてが問題なくロードされ、ページはまだアクティブです。問題は、編集列が自分のページにとって非常に重要なので、解決策ではないということです。
私はスクロールのページネーションを調べましたが、私が必要とするものを正確に実行したり、私が従うのに十分単純な例/デモは見つかりませんでした(私はかなり完全な初心者です)。私はまた、ページネーションを実装する必要があるとは思わない。ページの読み込みに数秒かかる場合は大丈夫です。私の本当の問題/疑問は、セッションを終了させるスタックオーバーフローです。これを引き起こす原因となっている編集列について何がわかりませんが、何とかこの問題を解決して、このページにアクセスしてもセッション全体が終了しないようにする必要があります。それが唯一の選択肢であればスクロールにページネーションを追加するつもりですが、私が言ったように、私はまだそれを理解することができませんでした。私はそれが問題を解決することも確実ではない。私が他のコードなどを投稿してもらえれば助かります。
を取り除く
TemplateField
を使用することができます画面のサイズ、異なる列が表示されます(私はテーブルに5-10の列を持っています)。 DataTableの編集列には、次のようなURLのHTMLが含まれているため、二重編集列も必要です。編集すると、自動生成されたままにしておくと、リテラルテキストが表示されますが、その代わりにリンクにしたいときに使用します。だから、私はテーブルのデータを持つページのリンク列を作成して、後でテーブルから列を削除しています。私が見つけることができる唯一の解決策です。 – issharp