protected void OkButton_Click(object sender, EventArgs e)
        {
            // Looping through all the rows in the GridView
            foreach (GridViewRow row in SearchResultsGrid.Rows)
            {
                CheckBox checkbox = (CheckBox)row.FindControl("SelectCheckbox");
                if ((checkbox != null) && (checkbox.Checked))
                {
                    // Retreive the DigitalGood
                    int         digitalGoodId = Convert.ToInt32(SearchResultsGrid.DataKeys[row.RowIndex].Value);
                    DigitalGood dg            = DigitalGoodDataSource.Load(digitalGoodId);

                    // ( Bug 8262 ) CREATE A NEW ORDER ITEM FOR EACH DIGITAL GOOD
                    OrderItem oi = new OrderItem();
                    oi.OrderId = _OrderId;
                    oi.CustomFields["DigitalGoodIndicator"] = "1";
                    oi.Name          = dg.Name;
                    oi.OrderItemType = OrderItemType.Product;
                    oi.Price         = 0;
                    oi.Quantity      = 1;
                    oi.Shippable     = Shippable.No;
                    oi.IsHidden      = true;
                    oi.Save();

                    OrderItemDigitalGood orderItemDigitalGood = new OrderItemDigitalGood();
                    orderItemDigitalGood.OrderItemId   = oi.Id;
                    orderItemDigitalGood.DigitalGoodId = digitalGoodId;
                    orderItemDigitalGood.Name          = dg.Name;
                    orderItemDigitalGood.Save();
                    orderItemDigitalGood.Save();
                }
            }
            Response.Redirect(string.Format("ViewDigitalGoods.aspx?OrderNumber={0}", _Order.OrderNumber));
        }
        protected void SaveKeyButton_Click(object sender, EventArgs e)
        {
            OrderItemDigitalGood oidg = OrderItemDigitalGoodDataSource.Load(AlwaysConvert.ToInt(this.OidgId.Value));

            if (oidg != null)
            {
                // WE NEED TO UPDATE THE CURRENT LOADED LIST TO AVOID DISPLAY ISSUES
                int i = _Order.Items.IndexOf(oidg.OrderItem.Id);
                int j = _Order.Items[i].DigitalGoods.IndexOf(oidg.Id);
                OrderItemDigitalGood tempOidg = _Order.Items[i].DigitalGoods[j];
                tempOidg.SetSerialKey(SerialKeyData.Text, true);
                tempOidg.Save();
                OidgId.Value = String.Empty;
                BindDigitalGoodsGrid();
                EditKeyPopup.Hide();
            }
        }
        protected void DigitalGoodsGrid_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int orderItemDigitalGoodId = AlwaysConvert.ToInt(e.CommandArgument);
            OrderItemDigitalGood oidg  = FindDigitalGood(orderItemDigitalGoodId);
            ISerialKeyProvider   asd   = oidg.DigitalGood.GetSerialKeyProviderInstance();

            if (oidg != null)
            {
                switch (e.CommandName)
                {
                case "Activate":
                    oidg.Activate();
                    oidg.Save();
                    break;

                case "Deactivate":
                    oidg.Deactivate();
                    oidg.Save();
                    break;

                case "GetKey":
                    if (oidg.DigitalGood.GetSerialKeyProviderInstance() != null)
                    {
                        oidg.AcquireSerialKey();
                        oidg.Save();
                    }
                    break;

                case "SetKey":
                    this.SerialKeyData.Text      = String.Empty;
                    this.SaveKeyButton.Visible   = true;
                    this.DeleteKeyButton.Visible = false;
                    this.OidgId.Value            = oidg.Id.ToString();
                    this.EditKeyPopup.Show();
                    break;

                //case "ReturnKey":
                //    if (oidg.DigitalGood.GetSerialKeyProviderInstance() != null)
                //    {
                //        oidg.ReturnSerialKey();
                //        oidg.Save();
                //    }
                //    else
                //    {
                //        oidg.SerialKeyData = null;
                //        oidg.Save();
                //    }
                //    break;
                case "ViewKey":
                    this.SerialKeyData.Text      = oidg.SerialKeyData;
                    this.SaveKeyButton.Visible   = false;
                    this.DeleteKeyButton.Visible = true;
                    this.OidgId.Value            = oidg.Id.ToString();
                    this.EditKeyPopup.Show();

                    break;

                case "Delete":
                    // GET THE ORDERITEM THAT CONTAINS THE DIGITAL GOOD
                    OrderItem oi = FindOrderItem(oidg.OrderItemId);
                    if (oi != null)
                    {
                        // DETERMINE IF THE ORDERITEM IS A PLACEHOLDER FOR DIGITAL GOOD
                        if (oi.CustomFields.TryGetValue("DigitalGoodIndicator") == "1")
                        {
                            // THE ORDERITEM IS A PLACEHOLDER, REMOVE THE ITEM (AND DIGITAL GOOD)
                            int oiIndex = _Order.Items.IndexOf(oi.Id);
                            if (oiIndex > -1)
                            {
                                _Order.Items.DeleteAt(oiIndex);
                            }
                        }
                        else
                        {
                            // NOT A PLACEHOLDER, DELETE THE DIGITAL GOOD ONLY
                            int dgIndex = oi.DigitalGoods.IndexOf(oidg.Id);
                            if (dgIndex > -1)
                            {
                                oi.DigitalGoods.DeleteAt(dgIndex);
                            }
                        }
                    }
                    break;
                }
                BindDigitalGoodsGrid();
            }
        }