私が見ることができる限り、現時点ではランダムに見えるので、このエラーについてできる限り正確かつ説明します。
背景情報を提供するために、私はオンラインショップを作成しています。ユーザーは「追加」ボタンをクリックして、グリッドビューのテンプレートフィールドからカートにアイテムを追加します。これは、購入したいアイテムを受け取り、それをカート データベース テーブルに挿入します。このテーブルは、「カート」アイコンをクリックして内容を表示すると、グリッドビューを介して表示されます。
ユーザーがアイテムをクリックすると、アイテムがまだバスケットにないことを確認するためのチェックが実行されます。そこにある場合は新しい金額に更新し、ない場合はカートデータベースに挿入し、ラベルを更新してアイテムの数量を表示します。アイテムがクリックされたときにボタンがカートまたはラベルの合計を追加または更新しないことがあるというイライラするエラーがあることを除けば、これはすべて正常に機能します。これは、最初のグリッド アイテムで最も頻繁に発生するようです。
デバッガーをステップ実行しましたが、すべて機能しているようで、グリッドローなどから正しい 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;
}
}
この質問について曖昧で申し訳ありませんが、私は本当にそれを突き止めることができます! うまくいけば、誰かが私が間違っていることを見てくれるでしょう。