//List<int> ListaADD = new List<int>();

        //Evento Load
        private void frmCompra_Load(object sender, EventArgs e)
        {
            //Carregando as compras
            dgvCompra.DataSource = DALCompra.CarregarGrid();
            dgvCompra.Columns["CompraTotal"].DefaultCellStyle.Format = "C2";

            //Iniciando os dados do combobox Tipo Pagamento
            cbxTipoPagamento.DataSource    = DALTipoPagamento.CarregarGrid();
            cbxTipoPagamento.ValueMember   = "tipoPag_cod";
            cbxTipoPagamento.DisplayMember = "tipoPag_nome";
            cbxTipoPagamento.SelectedIndex = -1;

            //Iniciando os dados do combobox Fornecedor
            cbxFornecedor.DataSource    = DALFornecedor.CarregarGrid();
            cbxFornecedor.ValueMember   = "fornecedor_cod";
            cbxFornecedor.DisplayMember = "fornecedor_nome";
            cbxFornecedor.SelectedIndex = -1;
        }
        //botão excluir compra
        private void btnExcluir_Click(object sender, EventArgs e)
        {
            try
            {
                //Aqui ele executa um diálogo perguntando se o usuário deseja ou não excluir o registro.
                if (MessageBox.Show("Deseja excluir o registro?", "Atenção", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    /*Caso "sim", é aberto a conexão com o banco e executado o método de excluir. */
                    //Método de excluir sendo chamado.
                    BLLCompra.Excluir(int.Parse(dgvCompra.CurrentRow.Cells[0].Value.ToString()));

                    dgvCompra.DataSource = DALCompra.CarregarGrid();
                }
            }
            catch
            {
                //Caso apresente algum erro. Será retornado esta mensagem.
                MessageBox.Show("Impossível excluir o registro. \n O registro está sendo utilizado em outro local");
            }
        }
        //Evenoto click salvar
        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (btnSalvar.Text == "Salvar")
            {
                if (txtNotaFiscal.Text == "" || cbxQuantParcela.Text == "" || cbxStatus.Text == "" || cbxFornecedor.Text == "" || cbxTipoPagamento.Text == "") //Analisando se foi preenchido todos os dados
                {
                    MessageBox.Show("Preencha todos os dados!");
                }
                else if (DateTime.Today > dtpDataCompra.Value.Date) //Analisando se a data informada é maior ou igual a hora atual
                {
                    MessageBox.Show("A Data da compra não pode ser menor que a data atual!");
                }
                else if (dgvProduto.RowCount == 0) //Analisando se foi informado algum produto
                {
                    MessageBox.Show("Adicione os produtos!", "OK");
                }
                else
                {
                    try
                    {
                        //Passando os dados da compra
                        Compra.CompraData       = dtpDataCompra.Value.Date;
                        Compra.CompraNotaFiscal = txtNotaFiscal.Text;
                        Compra.CompraValor      = double.Parse(txtValor.Text);
                        Compra.CompraParcelas   = int.Parse(cbxQuantParcela.Text);
                        Compra.CompraStatus     = cbxStatus.Text;
                        Compra.FornecedorCod    = (int)cbxFornecedor.SelectedValue;
                        Compra.TipoPagCod       = (int)cbxTipoPagamento.SelectedValue;
                        //Salnvando a compra
                        BLLCompra.Incluir(Compra);
                        //Pegando o id da compra salva
                        Compra.CompraCod = int.Parse(DALCompra.PegarId());
                        //Criando um variavel para salvar a data da nova prestação
                        DateTime ProximaPrestação = dtpDataCompra.Value.Date;
                        //Criando e salvando as parcelas
                        for (int i = 0; i < Compra.CompraParcelas; i++)
                        {
                            Compra.Parcelas.Add(new MParcelasCompra(double.Parse(txtValorParcela.Text), ProximaPrestação.AddMonths(i + 1), Compra.CompraCod)); //Instanciando a parcela

                            //Salvando as Parcelas
                            BLLParcelasCompras.Incluir(Compra.Parcelas[i]);
                        }

                        //Salvando os Produtos e consequentemente o item
                        foreach (var item in Compra.Itens)
                        {
                            //Verificar se o produto não já existe, caso sim só será associado ao item compra
                            if (item.Produto.CodigoProduto == 0)
                            {
                                //Analisando  se a compra foi finalizada, pois caso seja o valor do produto será incrementado
                                if (cbxStatus.Text != "FINALIZADA")
                                {
                                    item.Produto.QuantProduto = 0;

                                    //Colando ele fora de Estoque, pois a compra não foi finalizada
                                    item.Produto.StatusProduto = "FORA DE ESTOQUE";
                                }

                                //Chamando o metodo Incluir um produto
                                BLLProduto.Incluir(item.Produto);
                            }
                            else //Significa que o produto já existe
                            {
                                var tabela = DALProduto.PegarDados(item.Produto.CodigoProduto); //Pegando os dados do produto já existente
                                //Passando os dados para as variáveis
                                int    cod    = int.Parse(tabela.Rows[0]["produto_cod"].ToString());
                                string nome   = tabela.Rows[0]["produto_nome"].ToString();
                                string desc   = item.Produto.DescricaoProduto;
                                double valor  = item.Produto.ValorVendaProduto;
                                double quant  = double.Parse(tabela.Rows[0]["produto_qtde"].ToString());
                                string status = item.Produto.StatusProduto;
                                int    codUni = item.Produto.CodigoUnidadeMedida;
                                int    codCat = item.Produto.CodigoCategoria;
                                int    codSub = 0;
                                //Analisado se tem subcategoria
                                if (tabela.Rows[0]["subCategoria_cod"].ToString() != "")
                                {
                                    codSub = int.Parse(tabela.Rows[0]["subCategoria_cod"].ToString());
                                }

                                //Analisando  se a compra foi finalizada, pois caso seja o valor do produto será incrementado
                                if (cbxStatus.Text == "FINALIZADA")
                                {
                                    quant = quant + item.ItemCompraQuant;
                                }
                                else if (quant == 1) //Analizando se ainda tem produto em estoque, caso não ele terá seu status mudado
                                {
                                    //Colando ele fora de Estoque, pois a compra não foi finalizada
                                    item.Produto.StatusProduto = "FORA DE ESTOQUE";
                                }

                                //Instanciando o obj produto
                                MProduto prodExiste = new MProduto(nome, desc, valor, quant, status, codUni, codCat, codSub);
                                prodExiste.CodigoProduto = cod; //Pegando o id
                                //Passando o id do produto
                                item.Produto.CodigoProduto = cod;
                                //Atualizando as informações
                                BLLProduto.Alterar(prodExiste);
                            }

                            //Passando o id da compra
                            item.CompraCodigo = Compra.CompraCod;
                            //Salvando o produto na lista item
                            BLLItensCompra.Incluir(item);
                        }
                        MessageBox.Show("Compra Salva Com Sucesso!");
                        dgvCompra.DataSource = DALCompra.CarregarGrid();
                        //Limpando os campos
                        txtNotaFiscal.Clear();
                        txtValor.Clear();
                        txtValorParcela.Clear();
                        txtValor.Clear();
                        cbxQuantParcela.SelectedIndex  = -1;
                        cbxStatus.SelectedIndex        = -1;
                        cbxFornecedor.SelectedIndex    = -1;
                        cbxTipoPagamento.SelectedIndex = -1;
                        dtpDataCompra.Value            = DateTime.Today;
                        Compra.Itens.Clear(); //Limpando os produtos
                        CarregarGrid();
                    }
                    catch (SqlException erro)
                    {
                        MessageBox.Show(erro.Message, "OK");
                        //Apagando tudo caso haja um erro
                        DALCompra.Excluir(int.Parse(DALCompra.PegarId()));
                    }
                    catch (Exception erro)
                    {
                        MessageBox.Show(erro.Message, "OK");
                        //Apagando tudo caso haja um erro
                        DALCompra.Excluir(int.Parse(DALCompra.PegarId()));
                    }
                }
            }
            else
            {
                if (txtNotaFiscal.Text == "" || cbxQuantParcela.Text == "" || cbxStatus.Text == "" || cbxFornecedor.Text == "" || cbxTipoPagamento.Text == "") //Analisando se foi preenchido todos os dados
                {
                    MessageBox.Show("Preencha todos os dados!");
                }
                else if (DateTime.Today > dtpDataCompra.Value.Date) //Analisando se a data informada é maior ou igual a hora atual
                {
                    MessageBox.Show("A Data da compra não pode ser menor que a data atual!");
                }
                else if (dgvProduto.RowCount == 0) //Analisando se foi informado algum produto
                {
                    MessageBox.Show("Adicione os produtos!", "OK");
                }
                else
                {
                    try
                    {
                        //if Compra.Itens.
                        //Passando os dados da compra
                        Compra.CompraCod        = int.Parse(txtCodigo.Text);
                        Compra.CompraData       = dtpDataCompra.Value.Date;
                        Compra.CompraNotaFiscal = txtNotaFiscal.Text;
                        Compra.CompraValor      = double.Parse(txtValor.Text);
                        Compra.CompraParcelas   = int.Parse(cbxQuantParcela.Text);
                        Compra.CompraStatus     = cbxStatus.Text;
                        Compra.FornecedorCod    = (int)cbxFornecedor.SelectedValue;
                        Compra.TipoPagCod       = (int)cbxTipoPagamento.SelectedValue;
                        //Salnvando a compra
                        BLLCompra.Alterar(Compra);

                        MParcelasCompra parcelas = new MParcelasCompra();
                        parcelas.CompraCodigo = Compra.CompraCod;
                        //Excluindo parcelas salvas
                        BLLParcelasCompras.Excluir(parcelas);

                        //Criando um variavel para salvar a data da nova prestação
                        DateTime ProximaPrestação = dtpDataCompra.Value.Date;
                        //Criando e salvando as parcelas



                        for (int i = 0; i < int.Parse(cbxQuantParcela.Text); i++)
                        {
                            Compra.Parcelas.Add(new MParcelasCompra(double.Parse(txtValorParcela.Text), ProximaPrestação.AddMonths(i), Compra.CompraCod)); //Instanciando a parcela

                            //Salvando as Parcelas
                            BLLParcelasCompras.Incluir(Compra.Parcelas[i]);
                        }

                        //excluindo os itens da lista de excluidos
                        foreach (var lista in ListaItensExcluidos)
                        {
                            //int teste = int.Parse(dgvProduto.CurrentRow.Cells[6].Value.ToString());
                            //BLLProduto.Alterar(int.Parse(dgvProduto.CurrentRow.Cells[6].Value.ToString()));
                            BLLItensCompra.Excluir(lista);
                        }
                        foreach (var lista in ListaProdutosExcluidos)
                        {
                            BLLProduto.Alterar(lista);
                        }

                        //Salvando os Produtos e consequentemente o item
                        foreach (var item in Compra.Itens)
                        {
                            //Analisando  se a compra foi finalizada, pois caso seja o valor do produto será incrementado
                            if (cbxStatus.Text != "FINALIZADA")
                            {
                                item.Produto.QuantProduto = 0;
                            }
                            else
                            {
                                item.Produto.QuantProduto = item.ItemCompraQuant;
                            }
                            if (item.Produto.QuantProduto == 0)
                            {
                                item.Produto.StatusProduto = "FORA DE ESTOQUE";
                            }

                            //Chamando o metodo Alterar um produto
                            BLLProduto.Alterar(item.Produto);


                            //Passando o id da compra
                            item.CompraCodigo = int.Parse(txtCodigo.Text);


                            //Salvando o produto na lista item
                            BLLItensCompra.Alterar(item);
                            //Salva o produto caso durante a alteração tenha sido criado o novo produto
                            if (item.Produto.CodigoProduto == 0)
                            {
                                //Analisando  se a compra foi finalizada, pois caso seja o valor do produto será incrementado
                                if (cbxStatus.Text != "FINALIZADA")
                                {
                                    item.Produto.QuantProduto = 0;


                                    //Colando ele fora de Estoque, pois a compra não foi finalizada
                                    item.Produto.StatusProduto = "FORA DE ESTOQUE";
                                }

                                //Chamando o metodo Incluir um produto
                                BLLProduto.Incluir(item.Produto);
                                //Passando o id da compra
                                item.CompraCodigo = Compra.CompraCod;
                                //Salvando o produto na lista item
                                BLLItensCompra.Incluir(item);
                            }
                            else
                            {
                                bool verificaexistencia = true;
                                foreach (var itensanterior in CompraAnterior.Itens)
                                {
                                    if (itensanterior.ItemCompraCodigo == item.ItemCompraCodigo)
                                    {
                                        verificaexistencia = true;
                                        break;
                                    }
                                    else
                                    {
                                        verificaexistencia = false;
                                    }
                                }
                                if (verificaexistencia == false)
                                {
                                    if (cbxStatus.Text != "FINALIZADA")
                                    {
                                        item.Produto.QuantProduto = 0;


                                        //Colando ele fora de Estoque, pois a compra não foi finalizada
                                        item.Produto.StatusProduto = "FORA DE ESTOQUE";
                                    }

                                    //Chamando o metodo Incluir um produto
                                    BLLProduto.Incluir(item.Produto);
                                    //Passando o id da compra
                                    item.CompraCodigo = Compra.CompraCod;
                                    //Salvando o produto na lista item
                                    BLLItensCompra.Incluir(item);
                                }
                            }
                        }
                        MessageBox.Show("Compra Salva Com Sucesso!");
                        dgvCompra.DataSource = DALCompra.CarregarGrid();
                        //Limpando os campos
                        txtNotaFiscal.Clear();
                        txtValor.Clear();
                        txtValorParcela.Clear();
                        txtValor.Clear();
                        cbxQuantParcela.SelectedIndex  = -1;
                        cbxStatus.SelectedIndex        = -1;
                        cbxFornecedor.SelectedIndex    = -1;
                        cbxTipoPagamento.SelectedIndex = -1;
                        dtpDataCompra.Value            = DateTime.Today;
                        Compra.Itens.Clear(); //Limpando os produtos
                        CarregarGrid();
                        //alterando botões
                        btnSalvar.Text              = "Salvar";
                        btnExcluir.Enabled          = true;
                        btnExcluirProduto.Enabled   = true;
                        btnAdicionarProduto.Enabled = true;
                        //limpando lista
                        ListaProdutosExcluidos.Clear();
                        ListaItensExcluidos.Clear();
                        Compra.Parcelas.Clear();
                    }
                    catch (SqlException erro)
                    {
                        MessageBox.Show(erro.Message, "OK");
                        //Apagando tudo caso haja um erro
                        DALCompra.Excluir(int.Parse(DALCompra.PegarId()));
                    }
                    catch (Exception erro)
                    {
                        MessageBox.Show(erro.Message, "OK");
                        //Apagando tudo caso haja um erro
                        DALCompra.Excluir(int.Parse(DALCompra.PegarId()));
                    }
                }
            }
        }