0

私が見ることができる限り、現時点ではランダムに見えるので、このエラーについてできる限り正確かつ説明します。

背景情報を提供するために、私はオンラインショップを作成しています。ユーザーは「追加」ボタンをクリックして、グリッドビューのテンプレートフィールドからカートにアイテムを追加します。これは、購入したいアイテムを受け取り、それをカート データベース テーブルに挿入します。このテーブルは、「カート」アイコンをクリックして内容を表示すると、グリッドビューを介して表示されます。

ユーザーがアイテムをクリックすると、アイテムがまだバスケットにないことを確認するためのチェックが実行されます。そこにある場合は新しい金額に更新し、ない場合はカートデータベースに挿入し、ラベルを更新してアイテムの数量を表示します。アイテムがクリックされたときにボタンがカートまたはラベルの合計を追加または更新しないことがあるというイライラするエラーがあることを除けば、これはすべて正常に機能します。これは、最初のグリッド アイテムで最も頻繁に発生するようです。

デバッガーをステップ実行しましたが、すべて機能しているようで、グリッドローなどから正しい ID が取得されています。何らかのポストバックの問題であるかどうか疑問に思っています。

サイト マスターの onload メソッドでカートの内容を設定するコード、load メソッド:

     protected void Page_Load(object sender, EventArgs e)
    {

        if (Session["usersName"] != null)
        {
            object a = Session["_id"];
            IDMaster = Convert.ToInt32(a);

            UserWelcome.Text = "Welcome back " + Session["usersName"].ToString();
            cartButton.Visible = true;
            Label1.Visible = true;
            Label2.Visible = true;
            memberLogin.Visible = false;
            LblOr.Visible = false;
            lblPlease.Visible = false;
            memberLogin.Visible = false;
            memberReg.Visible = false;

        }

        else
        {
            cartButton.Visible = false;
            Label1.Visible = false;
            Label2.Visible = false;
            UserWelcome.Visible = false;
            memberLogin.Visible = true;
            memberLogout.Visible = false;
            LblOr.Visible = true;
            lblPlease.Visible = true;
            memberLogin.Visible = true;
            memberReg.Visible = true;

            MenuItem foo = NavigationMenu.FindItem("My Orders"); // your particular item
            NavigationMenu.Items.Remove(foo);

        }

        setCart();

    }

    private void setCart()
    {

        int cartItems;
        string cartNos;

        SqlConnection sqlcon = new SqlConnection(connString);
        SqlCommand sqlcmd = new SqlCommand("SELECT * FROM contents WHERE memberID = " + IDMaster + "", sqlcon);
        SqlDataAdapter adp = new SqlDataAdapter(sqlcmd);
        DataSet ds = new DataSet();
        adp.Fill(ds);


        if (ds.Tables[0].Rows.Count > 0)
        {
            cartItems = ds.Tables[0].Rows.Count;
            cartNos = cartItems.ToString();
            Label1.Text = cartNos;
        }


        else
        {

            int noItems = 0;
            string convertEmptyItems;

            convertEmptyItems = noItems.ToString();
            Label1.Text = convertEmptyItems;
        }

    }

アイテムがすでに存在するかどうかに応じて、カートを追加または更新するために使用されるコード:

        GridViewRow row = ((Button)sender).Parent.Parent as GridViewRow;
        TextBox t = (TextBox)row.FindControl("txtQuan");

        object ID = GridView1.DataKeys[row.RowIndex].Value;

        rowID = Convert.ToInt32(ID);

        ViewState["ID"] = rowID;

        string qty = t.Text;

        int stockToAdd = Convert.ToInt32(qty);

        DBHandler add = new DBHandler(rowID);

        int qtyCheck = add.getStockQty();

        if (stockToAdd > qtyCheck)
        {

            Button2_ModalPopupExtender.Show();

        }

        else{


            SqlConnection con;
            con = add.openDB();

            con.Open();

            DBHandler idCheck = new DBHandler(rowID);
            int rows = idCheck.checkCartRows();

            if (rows > 0)
            {
               int qtyNow = idCheck.getCartQty();

                int updateStock = qtyNow + stockToAdd;

                idCheck.updateQty(rowID, updateStock);
                updatePanel();

            }

            else
            {

                idCheck.insertCart(IDMaster, qty);
                updatePanel();

            }
            add.close();

            DBHandler updateCart = new DBHandler(IDMaster);

            int newRows = updateCart.checkCartRowsAfterUpdate();

            string numberOfRows = newRows.ToString();

            ((Label)this.Master.FindControl("Label1")).Text = numberOfRows;

        }


        }

この質問について曖昧で申し訳ありませんが、私は本当にそれを突き止めることができます! うまくいけば、誰かが私が間違っていることを見てくれるでしょう。

4

1 に答える 1

0

これを並べ替えました。それは私が見逃していたものであることが判明しました。基本的に、カートの内容を表示すると、すべてのメンバーのカートに表示されました。この時点でアイテムを追加していたので、これは私を混乱させました。私の「カート」は、セッション変数を介してログインした特定のメンバーのコンテンツのみを表示します。カートにアイテムが追加されたかどうかを確認すると、すべてのメンバーに追加されたすべてのアイテムが表示されていたので、もちろん、別のメンバーが既にカートにアイテムを追加していた場合、それを追加することは決してありませんでした。それを更新しようとしていて、他のメンバーのためにそれを追加していたので、ラベルは更新されませんでした. カートの内容を削除するとすぐに追加できました。したがって、基本的には、各アイテムがそれを追加したメンバーの対応する ID を持ち、正常に動作するようにコードを修正しました。

ここでの重要なルールは、コードのすべてのプロセスに欠けているばかげたことがないかチェックすることです。

于 2013-04-23T12:58:24.270 に答える