private void btnCompromissoRmv_Click(object sender, EventArgs e)
        {
            // Remove o registro selecionado
            DataGridViewRow mySelectedRow = dataGridViewCompromissos.CurrentRow;

            if (mySelectedRow.Selected) // Se a linha estiver selecionada...
            {
                // Avise o usuário sobre a operação, permita-o escolher continuar ou não. Se continuar, delete o compromisso.
                DialogResult myAlert = MessageBox.Show("A exclusão é permanente, o compromisso será completamente removido.\nTem certeza que deseja continuar?", "ATENÇÃO", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

                if (myAlert == DialogResult.Yes)
                {
                    DTO_Compromisso obj_dtoCompromisso = new DTO_Compromisso();
                    BLL_Compromisso obj_bllCompromisso = new BLL_Compromisso();

                    // Index da linha selecionada para realizar a exclusão "Cells[0]" deve ser o cod_compromisso no dataGridViewCompromissos.
                    obj_dtoCompromisso.codCompromisso = int.Parse(mySelectedRow.Cells[0].Value.ToString());

                    string retornoBLL = obj_bllCompromisso.validarRmvCompromisso(obj_dtoCompromisso);

                    MessageBox.Show(retornoBLL, "CONCLUSÃO", MessageBoxButtons.OK);
                    atualizarCompromisso();
                }
                //else
                //{
                //MessageBox.Show("Sábia decisão...");
                //}

                //dataGridViewCompromissos.Rows.Remove(mySelectedRow);    // Ao clicar, remove a linha selecionada.
            }
        }
        private void btnSalvarNewCompromisso_Click(object sender, EventArgs e)
        {
            // Avisa o usuário sobre a operação, permita-o escolher continuar ou não. Se continuar, salve o compromisso.
            DialogResult myAlert = MessageBox.Show("Deseja realmente salvar o compromisso?", "ATENÇÃO", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

            if (myAlert == DialogResult.Yes)
            {
                DTO_Compromisso obj_dtoCompromisso = new DTO_Compromisso();
                BLL_Compromisso obj_bllCompromisso = new BLL_Compromisso();

                // Armazena os dados atuais no objeto, isso é necessário para realizar a atualização.
                obj_dtoCompromisso.codCompromisso = int.Parse(lblHiddenCod.Text);
                obj_dtoCompromisso.assunto        = txbAssuntoCompromisso.Text;
                obj_dtoCompromisso.descricao      = txbDescricaoCompromisso.Text;

                string selectedDataCompromisso             = monthCalendarCompromisso.SelectionRange.Start.ToString();
                System.Globalization.CultureInfo myCulture = new System.Globalization.CultureInfo(System.Globalization.CultureInfo.CurrentCulture.Name.ToString());
                DateTime dataCompromisso = DateTime.Parse(selectedDataCompromisso, myCulture);

                obj_dtoCompromisso.dataCompromisso = dataCompromisso.ToString("yyyy-MM-dd"); // Data validada.
                obj_dtoCompromisso.horario         = mtxbHorarioCompromisso.Text;
                obj_dtoCompromisso.estaAtivo       = chkBoxAtivo.Checked;

                // Inicia as validações dos dados do objeto por meio da BLL_Compromisso e salva os dados na base de dados.
                string retornoBLL = obj_bllCompromisso.validarNewCompromisso(obj_dtoCompromisso);

                MessageBox.Show(retornoBLL);

                this.Close();
            }
        }
        // Configuração da remoção de convidados.
        private void btnRmvConvidado_Click(object sender, EventArgs e)
        {
            DataGridView  dgvConvidados     = this.dataGridViewConvidadosCompromisso;
            DTO_Convidado convidadoRemovido = new DTO_Convidado();

            var convidadosDataSource = (List <DTO_Convidado>)dataGridViewConvidadosCompromisso.DataSource;

            convidadoRemovido.nomeContato    = dgvConvidados.SelectedRows[0].Cells[0].Value.ToString();
            convidadoRemovido.codCompromisso = int.Parse(dgvConvidados.SelectedRows[0].Cells[1].Value.ToString());  // cod_compromisso: a coluna esta oculta na dataGridView.
            convidadoRemovido.estaConfirmado = bool.Parse(dgvConvidados.SelectedRows[0].Cells[2].Value.ToString());

            //MessageBox.Show(dgvConvidados.SelectedRows[0].Index.ToString());
            //MessageBox.Show(convidadoRemovido.codCompromisso.ToString());

            convidadosDataSource.RemoveAt(int.Parse(dgvConvidados.SelectedRows[0].Index.ToString()));
            //dgvConvidados.Rows.Remove(dgvConvidados.SelectedRows[0]);

            string retornoBLL = BLL_Compromisso.validarRmvConvidado(convidadoRemovido); // Remoção da lista na Base de Dados.

            MessageBox.Show(retornoBLL);

            dgvConvidados.DataSource         = null;
            dgvConvidados.DataSource         = convidadosDataSource;
            dgvConvidados.Columns[1].Visible = false;

            this.dataGridViewConvidadosCompromisso.ClearSelection();
            this.btnRmvConvidado.Enabled = false;
        }
        // Ao clicar em "btnSalvarEdicao" o usuário realizará a alteração dos dados do compromisso atual de acordo com as alterações realizadas na tela.
        private void btnSalvarEdicao_Click(object sender, EventArgs e)
        {
            // Avisa o usuário sobre a operação, permita-o escolher continuar ou não. Se continuar, altere o compromisso.
            DialogResult myAlert = MessageBox.Show("O compromisso será alterado.\nTem certeza que deseja continuar?", "ATENÇÃO", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

            if (myAlert == DialogResult.Yes)
            {
                DTO_Compromisso obj_dtoCompromisso = new DTO_Compromisso();
                BLL_Compromisso obj_bllCompromisso = new BLL_Compromisso();

                // Armazena os dados atuais no objeto, isso é necessário para realizar a atualização.
                obj_dtoCompromisso.codCompromisso = int.Parse(lblHiddenCod.Text);
                obj_dtoCompromisso.assunto        = txbAssuntoCompromisso.Text;
                obj_dtoCompromisso.descricao      = txbDescricaoCompromisso.Text;

                string selectedDataCompromisso             = monthCalendarCompromisso.SelectionRange.Start.ToString();
                System.Globalization.CultureInfo myCulture = new System.Globalization.CultureInfo(System.Globalization.CultureInfo.CurrentCulture.Name.ToString());
                DateTime dataCompromisso = DateTime.Parse(selectedDataCompromisso, myCulture);

                obj_dtoCompromisso.dataCompromisso = dataCompromisso.ToString("yyyy-MM-dd"); // Data validada.
                obj_dtoCompromisso.horario         = mtxbHorarioCompromisso.Text;
                obj_dtoCompromisso.estaAtivo       = chkBoxAtivo.Checked;
                obj_dtoCompromisso.Convidados      = (List <DTO_Convidado>) this.dataGridViewConvidadosCompromisso.DataSource; // É opcional passar a lista atual de convidados.

                // Inicia as validações dos dados do objeto por meio da BLL_Compromisso e salva os dados na base de dados.
                string retornoBLL = obj_bllCompromisso.validarAltCompromisso(obj_dtoCompromisso);

                MessageBox.Show(retornoBLL);

                // Volta os botões ao estado anterior à edição.
                this.btnEditarCompromisso.Enabled = true;
                this.btnEditarCompromisso.Visible = true;

                this.btnVoltarCompromisso.Enabled = true;
                this.btnVoltarCompromisso.Visible = true;

                this.btnSalvarEdicao.Visible = false;
                this.btnSalvarEdicao.Enabled = false;

                this.btnCancelarEdicao.Visible = false;
                this.btnCancelarEdicao.Enabled = false;

                this.txbAssuntoCompromisso.ReadOnly   = true;
                this.txbDescricaoCompromisso.ReadOnly = true;
                this.monthCalendarCompromisso.Enabled = false;
                this.mtxbHorarioCompromisso.ReadOnly  = true;
                this.chkBoxAtivo.AutoCheck            = false;
            }
        }
        private void btnEditarCompromisso_Click(object sender, EventArgs e)
        {
            //MessageBox.Show(teste);

            // Reconfiguração da tela para o modo de edição.
            this.btnEditarCompromisso.Enabled = false;
            this.btnEditarCompromisso.Visible = false;

            this.btnVoltarCompromisso.Enabled = false;
            this.btnVoltarCompromisso.Visible = false;

            this.btnSalvarEdicao.Visible = true;
            this.btnSalvarEdicao.Enabled = true;

            this.btnCancelarEdicao.Visible = true;
            this.btnCancelarEdicao.Enabled = true;

            //this.btnConvidarContato.Visible = true;
            //this.btnRmvConvidado.Visible = true;

            this.txbAssuntoCompromisso.ReadOnly   = false;
            this.txbDescricaoCompromisso.ReadOnly = false;
            this.monthCalendarCompromisso.Enabled = true;
            this.mtxbHorarioCompromisso.ReadOnly  = false;
            this.chkBoxAtivo.AutoCheck            = true;

            // Coleta os dados atuais do item descrito no momento que o botão de edição é clicado.
            // Isso garante que poderemos voltar essas informações caso o usuário cancele a edição.
            lastAssunto   = txbAssuntoCompromisso.Text;
            lastDescricao = txbDescricaoCompromisso.Text;
            lastHorario   = mtxbHorarioCompromisso.Text;
            lastAtivo     = chkBoxAtivo.Checked;

            lastDataCompromisso = monthCalendarCompromisso.SelectionRange.Start.ToString();
            System.Globalization.CultureInfo myCulture = new System.Globalization.CultureInfo(System.Globalization.CultureInfo.CurrentCulture.Name.ToString());
            DateTime myLastDataCompromisso             = DateTime.Parse(lastDataCompromisso, myCulture);

            DTO_Compromisso myCompromisso = new DTO_Compromisso();

            myCompromisso.codCompromisso = int.Parse(lblHiddenCod.Text);
            lastConvidados.Convidados    = BLL_Compromisso.verificarListaCompromisso(myCompromisso);

            //MessageBox.Show("Atenção: A lista de contatos é salva automaticamente, diferentemente dos outros campos, ela não voltará atrás ao cancelar a edição.", "ATENÇÃO", MessageBoxButtons.OK ,MessageBoxIcon.Warning);

            //MessageBox.Show("Assunto: " + lastAssunto + "\nDescricao: " + lastDescricao + "\nHorario: " + lastHorario + "\nData: " + myLastDataCompromisso.ToString() + "\nConvidados: " + lastConvidados.GetType());
        }
        // Configuração da adição de novos convidados.
        private void btnConvidarContato_Click(object sender, EventArgs e)
        {
            DataGridView  dgvContatos   = this.dataGridViewContatosCompromisso;
            DataGridView  dgvConvidados = this.dataGridViewConvidadosCompromisso;
            DTO_Convidado newConvidado  = new DTO_Convidado();

            var convidadosDataSource = (List <DTO_Convidado>)dataGridViewConvidadosCompromisso.DataSource;

            newConvidado.codCompromisso = int.Parse(this.lblHiddenCod.Text);
            newConvidado.nomeContato    = dgvContatos.SelectedRows[0].Cells[0].Value.ToString();
            newConvidado.estaConfirmado = true;

            bool isConvidado = false;                           // Flag de nome já identificado na lista de convidados.

            foreach (DataGridViewRow row in dgvConvidados.Rows) // Verificamos a coluna do nome em cada linha do dataGridView.
            {
                object nome = row.Cells[0].Value;
                if (nome != null && nome.ToString() == newConvidado.nomeContato)
                {
                    MessageBox.Show("Contato já convidado");
                    isConvidado = true;
                    break;
                }
            }

            if (!isConvidado)
            {
                convidadosDataSource.Add(newConvidado);
                string retornoBLL = BLL_Compromisso.validarNewConvidado(newConvidado);  // Adição à lista na Base de Dados.
                MessageBox.Show(retornoBLL);
            }

            //MessageBox.Show("cod: " + lblHiddenCod.Text + "\nnome: " + dgvContatos.SelectedRows[0].Cells[0].Value.ToString() + "\nconfirmado: " + true.ToString());

            dataGridViewConvidadosCompromisso.DataSource         = null;
            dataGridViewConvidadosCompromisso.DataSource         = convidadosDataSource;
            dataGridViewConvidadosCompromisso.Columns[1].Visible = false;   // Oculta a coluna "cod_compromisso".
            //dataGridViewConvidadosCompromisso.Refresh();
        }
        private void btnCompromissoDetalhes_Click(object sender, EventArgs e)
        {
            this.Hide();

            // Instânciamento das classes utilizadas.

            Compromisso     telaDetCompromisso = new Compromisso();
            DTO_Compromisso obj_dtoCompromisso = new DTO_Compromisso();
            BLL_Compromisso obj_bllCompromisso = new BLL_Compromisso();
            DataGridViewRow mySelectedRow      = dataGridViewCompromissos.CurrentRow;

            // Guarda os dados selecionados no DTO.

            CultureInfo myCulture       = new CultureInfo(CultureInfo.CurrentCulture.Name.ToString());
            DateTime    dataCompromisso = DateTime.Parse(mySelectedRow.Cells[2].Value.ToString(), myCulture); // Cells[2] = dataCompromisso (dd/mm/yyyy) - validation needed.

            //MessageBox.Show(dataCompromisso.ToString("yyyy-MM-dd"));

            obj_dtoCompromisso.codCompromisso  = int.Parse(mySelectedRow.Cells[0].Value.ToString());  // Cells[0] = codCompromisso.
            obj_dtoCompromisso.assunto         = mySelectedRow.Cells[1].Value.ToString();             // Cells[1] = assunto.
            obj_dtoCompromisso.dataCompromisso = dataCompromisso.ToString("yyyy-MM-dd");              // Data validada.
            obj_dtoCompromisso.horario         = mySelectedRow.Cells[3].Value.ToString();             // Cells[3] = horario (hh:mm:ss).
            obj_dtoCompromisso.descricao       = mySelectedRow.Cells[4].Value.ToString();             // Cells[4] = descricao.
            obj_dtoCompromisso.estaAtivo       = bool.Parse(mySelectedRow.Cells[5].Value.ToString()); // Cells[5] = estaAtivo default 1 (true).

            // Define a exibição dos dados na UI Compromisso.

            telaDetCompromisso.Text = "Assunto do Compromisso: " + obj_dtoCompromisso.assunto;
            telaDetCompromisso.txbAssuntoCompromisso.Text   = obj_dtoCompromisso.assunto;
            telaDetCompromisso.txbDescricaoCompromisso.Text = obj_dtoCompromisso.descricao;
            telaDetCompromisso.monthCalendarCompromisso.SetDate(dataCompromisso);
            telaDetCompromisso.mtxbHorarioCompromisso.Text = obj_dtoCompromisso.horario;
            telaDetCompromisso.chkBoxAtivo.Checked         = obj_dtoCompromisso.estaAtivo;
            telaDetCompromisso.lblHiddenCod.Text           = obj_dtoCompromisso.codCompromisso.ToString();

            // Verifica se existem convidados nesse compromisso e atualiza a GridView da tela Compromisso de acordo...
            obj_dtoCompromisso.Convidados = BLL_Compromisso.verificarListaCompromisso(obj_dtoCompromisso);  // Deve retornar uma lista de convidados.

            List <DTO_Convidado> myConvidados = obj_dtoCompromisso.Convidados;                              // Atribui a lista de convidados do nosso obj_dtoCompromisso a uma variável.

            telaDetCompromisso.dataGridViewConvidadosCompromisso.DataSource = myConvidados;                 // Passa a lista para a DataTable da dataGridView.

            telaDetCompromisso.dataGridViewConvidadosCompromisso.Columns["codCompromisso"].Visible = false; // Oculta um campo indesejado.


            // Desabilita inicialmente a edição dos detalhes.

            //telaDetCompromisso.btnConvidarContato.Enabled = false;
            //telaDetCompromisso.btnRmvConvidado.Enabled = false;
            telaDetCompromisso.txbAssuntoCompromisso.ReadOnly   = true;
            telaDetCompromisso.txbDescricaoCompromisso.ReadOnly = true;
            telaDetCompromisso.monthCalendarCompromisso.Enabled = false;
            telaDetCompromisso.mtxbHorarioCompromisso.ReadOnly  = true;
            telaDetCompromisso.chkBoxAtivo.AutoCheck            = false;
            telaDetCompromisso.btnEditarCompromisso.Enabled     = true;
            telaDetCompromisso.btnEditarCompromisso.Visible     = true;

            // Exibe a tela com os detalhes.

            telaDetCompromisso.ShowDialog();
            atualizarCompromisso();
            this.Show();
        }