この問題は、ポストバックでページが 2 回読み込まれることに関係しています。私はasp.netのページライフサイクルに対応していないため、私の投稿です。
簡単な検索により、AutoEventWireup は、現在 Page ディレクティブで参照されていないこのプレーヤーであることが明らかになりました。コードをステップ実行すると、Page_Load が 2 回実行されます。1 回目は、以下が自動生成された OnInint/InitializeComponent から実行されますthis.Load += new System.EventHandler(this.Page_Load);
。Int32 totalDuration = 0;
主な問題は次のとおりです。「期間」と呼ばれるセルの値を合計することにより、gridView RowDataBound イベントに入力されるクラス レベルの変数があります。たとえば、グリッド ビューには 2 つの行が含まれており、最初の行のセルには 35 (分) の値が含まれ、2 番目の行には 25 の値が含まれています。目的は、各行のすべての分を合計することです。簡単な方法は次のとおりです。
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
DataRowView drv = (DataRowView)e.Row.DataItem;
if (e.Row.RowType == DataControlRowType.DataRow)
{
totalDuration = totalDuration + Convert.ToInt32(drv["Duration"]);
}
lblMinutes.Text = totalDuration.ToString("#,##0");
}
Page_Load が 2 回実行されるため、totalDuration の値が 2 倍になりますが、これは明らかに正しくありません。this.Load += new System.EventHandler(this.Page_Load);
修正として、InitializeComponents メソッドの をコメントアウトしました 。サイトとページは機能しているように見えますが、これが根本的な問題の解決策であるかどうかはわかりません.
私はあなたの提案を歓迎します.InitilalizeComponent全体またはAutowireupなどについての説明を歓迎します.
りほさん、ありがとう
編集: Page_Load は次のようになります。
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
/code removed/
bindGrid(site, metric, month, year);
}
}
private void bindGrid(string site, string metric, int month, int year)
{
/code removed/
gv.DataSource = dvSearch;
gv.DataBind();
}