0

このシナリオでは、2 つのグリッドビュー (gvSnacks と gvSnackCart) を扱っています。gvSnacks には、項目を gvSnackCart に「追加」するためのテンプレート ボタン列を含む項目の固定リストが含まれています。

foreach が登場するのは、アイテムがまだカートに入れられていないことを確認したいからです。ユーザーがアイテムを 2 回選択した場合、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