0
在這種情況下我正在處理兩個gridviews(gvSnacks和gvSnackCart)。 gvSnacks包含一個帶有模板按鈕列的項目的固定列表,以將該項目「添加」到gvSnackCart。在foreach中使用switch語句?
在foreach進場,因爲我要確保該項目尚未放入購物車。如果用戶選擇一個項目兩次,我想要執行一個sql命令並使該項目的gvSnackCart數量增加1(而不是生成新記錄)。
如果記錄不在gvSnackCart,在foreach循環應該一路到它的默認和插入。
這裏的SQL命令從gvSnacks插入
string sqlInsert = "INSERT INTO ShoppingCart…
([shopperID], [itemName], [itemType], [quantityOrdered], [unitPrice])…
VALUES (@shopperID, @itemName, @itemType, @quantityOrdered, @unitPrice)";
myCommand.Parameters.Add("@shopperID", System.Data.SqlDbType.NVarChar).Value = txtCurrentUser.Text;
myCommand.Parameters.Add("@itemName", System.Data.SqlDbType.NVarChar).Value = snackDescription;
myCommand.Parameters.Add("@itemType", System.Data.SqlDbType.NVarChar).Value = "snack";
myCommand.Parameters.Add("@quantityOrdered", System.Data.SqlDbType.Int).Value = 1;
myCommand.Parameters.Add("@unitPrice", System.Data.SqlDbType.Money).Value = snackPrice;`
SqlCommand myCommand = new SqlCommand(sqlInsert, myConnection);`
現在,我得到所選項目的名稱,並與每一個現在比較內gvSnackCart
// Retrieve item's name
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = gvSnacks.Rows[index];
string snackDescription = row.Cells[2].Text.ToString();
// Checks for duplicate snack listing
int duplicate = 0;
foreach (GridViewRow gvRowSnack in gvSnackCart.Rows)
{
if (gvRowSnack.Cells[1].Text.ToString() == snackDescription)
{
duplicate = 1;
}
switch (duplicate)
{
case 0:
break;
case 1:
//This is the case where it's a duplicate
//and will be a command to update the record
break;
default:
try
{
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}
catch (Exception ex)
{
lblError.Visible = true;
lblError.Text = "There was an error while adding the records" + "<br />" + ex.Message;
}
break;
}
}
的gvSnackCart是數據綁定,應更新一個新的項目,除非它在一個更新的地方重複。由於某種原因,但它不起作用。我在運行時沒有收到錯誤。我用一個標籤測試了一個讀/寫,所以我知道我正在從gvSnacks中檢索項目名稱。我也在檢查數據庫表,它沒有顯示任何記錄被添加。什麼似乎不對?
是否可以有0.1的值,或空返回了,可能在隨後的開關可以使用的foreach ? – pshotwell
'duplicate'變量設置在兩個地方:當你聲明時設置爲0,如果零食是重複的,則設置爲1。所以你的'switch'語句只會遇到情況0或情況1.默認情況下本質上是「不可達代碼」,並且永遠不會執行。 – Bryan