protected DTOFiltroRelatorioQuestionario ObterFiltro()
        {
            int          id;
            Questionario questionario;

            return(new DTOFiltroRelatorioQuestionario
            {
                IdProcesso = int.TryParse(txtDemandas.Text, out id) && id != 0 ? (int?)id : null,
                IdTipoQuestionario =
                    int.TryParse(ddlTipoQuestionario.SelectedValue, out id) && id != 0 ? (int?)id : null,
                IdSolucaoEducacional = int.TryParse(txtSolucaoEducacional.Text, out id) && id != 0 ? (int?)id : null,
                IdOferta = int.TryParse(txtOferta.Text, out id) && id != 0 ? (int?)id : null,
                IdTurma = int.TryParse(txtTurma.Text, out id) && id != 0 ? (int?)id : null,

                // Caso seja o relatório de tutor, busca o questionário pós de pesquisa da turma informada na tela.
                // Como o id da turma foi setado acima, a variável id permanece com o id da turma e pode ser usado.
                IdQuestionario =
                    RelatorioTutor && id != 0
                        ? (questionario = new ManterQuestionarioAssociacao().ObterPesquisaPosTurma(id)) != null ? questionario.ID : 0
                        : int.TryParse(txtQuestionario.Text, out id) && id != 0 ? id : 0,

                IdsUf = ListBoxesUF.RecuperarIdsSelecionados <int>().ToList(),
                IdsNivelOcupacional = ListBoxesNivelOcupacional.RecuperarIdsSelecionados <int>().ToList(),
                IdsStatusMatricula = ListBoxesStatus.RecuperarIdsSelecionados <int>().ToList(),
                IdsCategorias = ucCategorias1.IdsCategoriasMarcadas.ToList(),
                IsRelatorioTutor = RelatorioTutor,
                IdProfessor = int.TryParse(cbxProfessor.SelectedValue, out id) && id != 0 ? (int?)id : null
            });
        }
        protected void btnPesquisar_Click(object sender, EventArgs e)
        {
            using (var relDa = new RelatorioDesempenhoAcademico())
            {
                DateTime?dataInicio          = null;
                DateTime?dataFim             = null;
                DateTime?dataInicioTermino   = null;
                DateTime?dataFimTermino      = null;
                DateTime?dataDataInicioTurma = null;
                DateTime?dataDataFinalTurma  = null;
                DateTime dataTmp;

                if (!string.IsNullOrWhiteSpace(txtDataInicio.Text))
                {
                    if (DateTime.TryParse(txtDataInicio.Text, out dataTmp))
                    {
                        dataInicio = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data inicial inválida");
                        return;
                    }
                }

                if (!string.IsNullOrWhiteSpace(txtDataFinal.Text))
                {
                    if (DateTime.TryParse(txtDataFinal.Text, out dataTmp))
                    {
                        dataFim = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data final inválida");
                        return;
                    }
                }

                if (dataFim.HasValue && dataInicio.HasValue && dataFim < dataInicio)
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "A data final deve ser maior que a inicial");
                    return;
                }

                if (!string.IsNullOrWhiteSpace(txtDataTerminoInicio.Text))
                {
                    if (DateTime.TryParse(txtDataTerminoInicio.Text, out dataTmp))
                    {
                        dataInicioTermino = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data inicial inválida");
                        return;
                    }
                }

                if (!string.IsNullOrWhiteSpace(txtDataTerminoFim.Text))
                {
                    if (DateTime.TryParse(txtDataTerminoFim.Text, out dataTmp))
                    {
                        dataFimTermino = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data final inválida");
                        return;
                    }
                }

                if (!string.IsNullOrWhiteSpace(txtDataInicioTurma.Text))
                {
                    if (DateTime.TryParse(txtDataInicioTurma.Text, out dataTmp))
                    {
                        dataDataInicioTurma = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data inicial turma inválida");
                        return;
                    }
                }

                if (!string.IsNullOrWhiteSpace(txtDataFinalTurma.Text))
                {
                    if (DateTime.TryParse(txtDataFinalTurma.Text, out dataTmp))
                    {
                        dataDataFinalTurma = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data fim de turma inválida");
                        return;
                    }
                }

                var categorias = ucCategorias1.IdsCategoriasMarcadas.Any()
                    ? ucCategorias1.IdsCategoriasMarcadas
                    : ucCategorias1.IdsCategoriasExistentes;

                var dTOFiltroDesempenhoAcademico = new DTOFiltroDesempenhoAcademico(
                    txtNome.Text,
                    txtCPF.Text,
                    ListBoxesNivelOcupacional.RecuperarIdsSelecionados <int>(),
                    ListBoxesUF.RecuperarIdsSelecionados <int>(),
                    ListBoxesPublicoAlvo.RecuperarIdsSelecionados <int>(),
                    dataInicio,
                    dataFim,
                    dataInicioTermino,
                    dataFimTermino,
                    dataDataInicioTurma,
                    dataDataFinalTurma,
                    ListBoxesStatus.RecuperarIdsSelecionados <int>(),
                    string.IsNullOrWhiteSpace(txtSolucaoEducacional.Text) ? 0 : int.Parse(txtSolucaoEducacional.Text),
                    string.IsNullOrWhiteSpace(txtOferta.Text) ? 0 : int.Parse(txtOferta.Text),
                    string.IsNullOrWhiteSpace(txtTurma.Text) ? 0 : int.Parse(txtTurma.Text),
                    categorias,
                    ListBoxesFormaDeAquisicao.RecuperarIdsSelecionados <int>(),
                    ListBoxesUFResponsavel.RecuperarIdsSelecionados <int>()
                    );

                var lstDa = relDa.ConsultarDesempenhoAcademico(dTOFiltroDesempenhoAcademico);

                // Insere a lista completa na sessão para não levar somente os resultados da página atual para a impressão.
                Session["dsRelatorio"] = lstDa;

                var resultado = SelecionarPagina();

                if (resultado.Any())
                {
                    var totalizadores = new List <DTOTotalizador>();

                    if (lstDa.Any())
                    {
                        // Caso não possua filtro de SE, Oferta ou Turma, exibe o totalizador que conta a quantidade de matrículas.
                        if (string.IsNullOrWhiteSpace(txtSolucaoEducacional.Text) &&
                            string.IsNullOrWhiteSpace(txtOferta.Text) && string.IsNullOrWhiteSpace(txtTurma.Text))
                        {
                            totalizadores.Add(
                                TotalizadorUtil.GetTotalizador(lstDa, "Total da quantidade de alunos registros", "CPF",
                                                               enumTotalizacaoRelatorio.Contar, false));
                        }

                        totalizadores.AddRange(new List <DTOTotalizador>
                        {
                            TotalizadorUtil.GetTotalizador(lstDa, "Total da quantidade de alunos CPF", "CPF", enumTotalizacaoRelatorio.ContarDistintos, false),
                            TotalizadorUtil.GetTotalizadorComposto(lstDa, "Total da quantidade por nível ocupacional", "StatusMatricula", "NivelOcupacional"),
                            TotalizadorUtil.GetTotalizador(lstDa, "Total da quantidade por status", "StatusMatricula", enumTotalizacaoRelatorio.Contar),
                            TotalizadorUtil.GetTotalizadorComposto(lstDa, "Total da quantidade de alunos UF", "StatusMatricula", "UF")
                        });

                        ucTotalizadorRelatorio.PreencherTabela(totalizadores);
                    }

                    componenteGeracaoRelatorio.Visible = true;
                    ucFormatoSaidaRelatorio.Visible    = true;
                    btnPesquisar.CssClass = "btn btn-default mostrarload";
                    Filtros.CssClass      = "panel-collapse collapse";
                }
                else
                {
                    ucTotalizadorRelatorio.LimparTotalizadores();
                    componenteGeracaoRelatorio.Visible = false;
                    ucFormatoSaidaRelatorio.Visible    = false;
                }

                WebFormHelper.ValidarVisibilidadeCamposGrid(dgRelatorio, chkListaCamposVisiveis.Items);
            }
        }