0

在这种情况下,我正在处理两个网格视图(gvSnacks 和 gvSnackCart)。gvSnacks 包含一个带有模板按钮列的固定项目列表,用于将项目“添加”到 gvSnackCart。

foreach 发挥作用是因为我想确保该项目尚未放入购物车。如果用户两次选择一个项目,我想执行一个 sql 命令并使该项目的 gvSnackCart 数量增加 1(而不是生成新记录)。

如果记录不在 gvSnackCart 中,则 foreach 应该一直循环到其默认值并插入它。

这是要插入的sql命令

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);`

现在我从 gvSnacks 中获取所选项目的名称,并与 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 检索项目名称。我也在检查数据库表,它没有显示任何正在添加的记录。似乎有什么问题?

4

1 回答 1

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);
    …
}
于 2012-12-07T07:00:39.110 回答