2012-12-07 81 views
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

是否可以有0.1的值,或空返回了,可能在隨後的開關可以使用的foreach ? – pshotwell

+0

'duplicate'變量設置在兩個地方:當你聲明時設置爲0,如果零食是重複的,則設置爲1。所以你的'switch'語句只會遇到情況0或情況1.默認情況下本質上是「不可達代碼」,並且永遠不會執行。 – Bryan

回答

2

您可以通過使用LINQ饒了自己很多的麻煩:

foreach (var snacks in gvSnackCart.Rows.GroupBy(snack => snack.Cells[1].Text.ToString())) 
{ 
    var p = myCommand.Parameters; 
    // I'm largely guessing at these, but hopefully you get the idea. 
    p.Add("@shopperID"  , SqlDbType.NVarChar).Value = txtCurrentUser.Text; 
    p.Add("@itemName"  , SqlDbType.NVarChar).Value = snacks.Key; 
    p.Add("@itemType"  , SqlDbType.NVarChar).Value = /* ??? */; 
    p.Add("@quantityOrdered", SqlDbType.Int ).Value = snacks.Count(); 
    p.Add("@unitPrice"  , SqlDbType.Money ).Value = snacks.Sum(r => r.SnackPrice); 
    … 
}