private void DeleteRow(object sender, EventArgs e)
        {
            PictureBox pb       = (PictureBox)sender;
            int        rowIndex = Convert.ToInt32(pb.Tag);

            basketTableLayoutPanel.SuspendLayout();

            // delete all controls of row that we want to delete
            for (int i = 0; i < basketTableLayoutPanel.ColumnCount; i++)
            {
                var control = basketTableLayoutPanel.GetControlFromPosition(i, rowIndex);
                basketTableLayoutPanel.Controls.Remove(control);
            }

            // move up row controls that comes after row we want to remove
            for (int i = rowIndex + 1; i < basketTableLayoutPanel.RowCount; i++)
            {
                for (int j = 0; j < basketTableLayoutPanel.ColumnCount; j++)
                {
                    var control = basketTableLayoutPanel.GetControlFromPosition(j, i);
                    if (control != null)
                    {
                        basketTableLayoutPanel.SetRow(control, i - 1);

                        if (j > 1)
                        {
                            control.Tag = i - 1;
                        }
                    }
                }
            }

            var removeStyle = basketTableLayoutPanel.RowCount - 1;

            if (basketTableLayoutPanel.RowStyles.Count > removeStyle)
            {
                basketTableLayoutPanel.RowStyles.RemoveAt(removeStyle);
            }

            basketTableLayoutPanel.RowCount--;
            totalPrice           = totalPrice - (float.Parse(Basket_list[rowIndex - 1][3]) * int.Parse(Basket_list[rowIndex - 1][5]));
            totalPricelabel.Text = "Total Price: " + totalPrice + " €";
            Basket_list.RemoveAt(rowIndex - 1);


            if (basketTableLayoutPanel.RowCount == 1)
            {
                basketTableLayoutPanel.Visible = false;
                noItemsLabel.Visible           = true;
                totalPricelabel.Text           = "Total Price: 0 €";
            }

            basketTableLayoutPanel.ResumeLayout();
        }
        private void OkButton_Click(object sender, EventArgs e)
        {
            creditCardNumberTextBox.Text = creditCardNumberTextBox.Text.Replace("-", "");

            if (creditCardComboBox.Text.Equals(string.Empty))
            {
                creditCardErrorLabel.Visible = true;
            }
            else
            {
                creditCardErrorLabel.Visible = false;
            }

            if (creditCardNumberTextBox.Text.Equals(string.Empty))
            {
                creditCardNumberErrorLabel.Text    = "*Credit Card Number is required";
                creditCardNumberErrorLabel.Visible = true;
            }
            else
            {
                match = cardRegex.Match(creditCardNumberTextBox.Text);

                if (!match.Success)
                {
                    creditCardNumberErrorLabel.Text    = "*Credit Card Number is not valid";
                    creditCardNumberErrorLabel.Visible = true;
                }
                else
                {
                    creditCardNumberErrorLabel.Visible = false;
                }
            }

            if (monthComboBox.Text.Equals(string.Empty))
            {
                expiredMonthErrorLabel.Visible = true;
            }
            else
            {
                expiredMonthErrorLabel.Visible = false;
            }

            if (yearComboBox.Text.Equals(string.Empty))
            {
                expiredYearErrorLabel.Visible = true;
            }
            else
            {
                expiredYearErrorLabel.Visible = false;
            }

            if (ccvTextBox.Text.Equals(string.Empty))
            {
                cvvErrorLabel.Visible = true;
            }
            else
            {
                cvvErrorLabel.Visible = false;
                int count = 0;
                foreach (char c in ccvTextBox.Text)
                {
                    count++;
                    if (!char.IsDigit(c) || count > 3)
                    {
                        cvvErrorLabel.Text    = "*CVV code must contains 3 digits";
                        cvvErrorLabel.Visible = true;
                        break;
                    }
                }
            }

            if (creditCardErrorLabel.Visible || creditCardNumberErrorLabel.Visible || expiredMonthErrorLabel.Visible || expiredYearErrorLabel.Visible || cvvErrorLabel.Visible)
            {
                return;
            }

            string date = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

            dbconn.Select("INSERT INTO bookstore_schema.orders (order_email, order_items, order_price, order_date) VALUES ('" + email + "', '" + bookItems + "', " + totalPrice + ", '" + date + "');");

            dt = dbconn.Select("SELECT order_id as id FROM bookstore_schema.orders WHERE order_email = '" + email + "' AND order_date = '" + date + "' AND received_date IS NULL;");

            Thread.Sleep(2000);

            Thread completeOrder = new Thread(delegate()
            {
                string orderID = dt.Rows[0]["id"].ToString();
                Thread.Sleep(10000);

                dbconn.ExecuteNonQuery("UPDATE bookstore_schema.orders SET received_date = '" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "' WHERE order_id = " + orderID + ";");
            });

            completeOrder.Name         = "CopleteOrder";
            completeOrder.IsBackground = true;
            completeOrder.Start();

            basketTableLayoutPanel.RowCount = 1;

            MessageBox.Show("Order confirmed!", "Confirmation", MessageBoxButtons.OK);

            Basket_list.Clear();

            this.Close();
        }
        private void checkQuantity(object sender, EventArgs e)
        {
            NumericUpDown quant = (NumericUpDown)sender;
            int           row   = Convert.ToInt32(quant.Tag);

            if (quant.Value > int.Parse(Basket_list[row - 1][4]))
            {
                basketTableLayoutPanel.GetControlFromPosition(2, row).BackColor = Color.Red;
            }
            else
            {
                basketTableLayoutPanel.GetControlFromPosition(2, row).BackColor = Color.White;
            }

            if (Convert.ToInt32(quant.Value) == 0)
            {
                basketTableLayoutPanel.SuspendLayout();

                // delete all controls of row that we want to delete
                for (int i = 0; i < basketTableLayoutPanel.ColumnCount; i++)
                {
                    var control = basketTableLayoutPanel.GetControlFromPosition(i, row);
                    basketTableLayoutPanel.Controls.Remove(control);
                }

                // move up row controls that comes after row we want to remove
                for (int i = row + 1; i < basketTableLayoutPanel.RowCount; i++)
                {
                    for (int j = 0; j < basketTableLayoutPanel.ColumnCount; j++)
                    {
                        var control = basketTableLayoutPanel.GetControlFromPosition(j, i);
                        if (control != null)
                        {
                            basketTableLayoutPanel.SetRow(control, i - 1);

                            if (j > 1)
                            {
                                control.Tag = i - 1;
                            }
                        }
                    }
                }

                var removeStyle = basketTableLayoutPanel.RowCount - 1;

                if (basketTableLayoutPanel.RowStyles.Count > removeStyle)
                {
                    basketTableLayoutPanel.RowStyles.RemoveAt(removeStyle);
                }

                basketTableLayoutPanel.RowCount--;
                totalPrice           = totalPrice - (float.Parse(Basket_list[row - 1][3]) * int.Parse(Basket_list[row - 1][5]));
                totalPricelabel.Text = "Total Price: " + totalPrice + " €";
                Basket_list.RemoveAt(row - 1);


                if (basketTableLayoutPanel.RowCount == 1)
                {
                    basketTableLayoutPanel.Visible = false;
                    noItemsLabel.Visible           = true;
                    totalPricelabel.Text           = "Total Price: 0 €";
                }

                basketTableLayoutPanel.ResumeLayout();
            }
            else if (quant.Value > int.Parse(Basket_list[row - 1][5]))
            {
                totalPrice += float.Parse(Basket_list[row - 1][3]);
                Basket_list[row - 1][5] = quant.Value.ToString();
                totalPricelabel.Text    = "Total Price: " + totalPrice + " €";
            }
            else if (quant.Value < int.Parse(Basket_list[row - 1][5]))
            {
                totalPrice -= float.Parse(Basket_list[row - 1][3]);
                Basket_list[row - 1][5] = quant.Value.ToString();
                totalPricelabel.Text    = "Total Price: " + totalPrice + " €";
            }
        }