0

この問題は、ポストバックでページが 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();
    }
4

0 に答える 0