protected void Page_Load(object sender, EventArgs e)
        {
            manterMatrilhaTrilha = new ManterMatriculaTrilha();

            var listaUsuarioTrilha = Cache["dsRelatorioHistoricoParticipacao"] as IList <UsuarioTrilha>;

            chkListaCamposVisiveis = Cache["dsCamposRelatorioHistoricoParticipacao"] as CheckBoxList;
            filtros = Cache["dsFiltrosRelatorioHistoricoParticipacao"] as DTOFiltrosHistoricoParticipacaoTrilha;

            if (listaUsuarioTrilha != null)
            {
                rptUsuariosTrilha.DataSource = listaUsuarioTrilha;
                rptUsuariosTrilha.DataBind();
            }
        }
        protected void btnPesquisar_Click(object sender, EventArgs e)
        {
            try
            {
                componenteGeracaoRelatorio.Visible = false;

                var usuarioTrilha = ObterObjetoUsuarioTrilha();

                manterMatriculaTrilha = new ManterMatriculaTrilha();

                if (usuarioTrilha == null)
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Alerta, "Nenhuma Informação Encontrada");
                }
                else
                {
                    if (ucLupaUsuario.SelectedUser != null)
                    {
                        usuarioTrilha.Usuario = ucLupaUsuario.SelectedUser;
                    }
                }

                // Ufs selecionados
                var ufsSelecionados = ucMultiplosUF.RecuperarIdsSelecionados <int>();

                //var listaUsuarioTrilha = manterMatriculaTrilha.ObterMatriculaTrilhaPorFiltro(usuarioTrilha, ufsSelecioandos).Take(10);
                var listaUsuarioTrilha = manterMatriculaTrilha.ObterMatriculaTrilhaPorFiltro(usuarioTrilha, ufsSelecionados);

                // Filtro por status de matrícula para que a consulta fique menor no momento do bind
                int idStatus;
                if (int.TryParse(ddlStatus.SelectedValue, out idStatus) && idStatus > 0)
                {
                    listaUsuarioTrilha = listaUsuarioTrilha.Where(x =>
                                                                  x.ListaItemTrilhaParticipacao.Any(p => p.ItemTrilha.ObterStatusParticipacoesItemTrilha(p.UsuarioTrilha) == (enumStatusParticipacaoItemTrilha)idStatus)).ToList();
                }

                var niveisOcupacionais = ucSelectNivelOcupacional.RecuperarIdsSelecionados <int>().ToList();
                listaUsuarioTrilha = niveisOcupacionais.Any() ?
                                     listaUsuarioTrilha.Where(x => niveisOcupacionais.Contains(x.NivelOcupacional.ID)).ToList() :
                                     listaUsuarioTrilha;

                // Filtro por data limite de conclusão
                listaUsuarioTrilha = !string.IsNullOrEmpty(txtDataLimite.Text) ?
                                     listaUsuarioTrilha.Where(x => x.DataLimite <= DateTime.Parse(txtDataLimite.Text)).ToList() :
                                     listaUsuarioTrilha;

                // Filtro por data inicio de conclusão
                listaUsuarioTrilha = !string.IsNullOrEmpty(txtPeriodoInicial.Text) ?
                                     listaUsuarioTrilha.Where(x => x.DataInicio >= DateTime.Parse(txtPeriodoInicial.Text)).ToList() :
                                     listaUsuarioTrilha;

                // Filtro por data fim de conclusão
                listaUsuarioTrilha = !string.IsNullOrEmpty(txtPeriodoFinal.Text) ?
                                     listaUsuarioTrilha.Where(x => x.DataFim <= DateTime.Parse(txtPeriodoFinal.Text)).ToList() :
                                     listaUsuarioTrilha;

                if (listaUsuarioTrilha.Any())
                {
                    componenteGeracaoRelatorio.Visible = true;

                    rptUsuariosTrilha.DataSource = listaUsuarioTrilha;
                    rptUsuariosTrilha.DataBind();


                    Cache["dsRelatorioHistoricoParticipacao"]        = listaUsuarioTrilha;
                    Cache["dsCamposRelatorioHistoricoParticipacao"]  = chkListaCamposVisiveis;
                    Cache["dsFiltrosRelatorioHistoricoParticipacao"] = new DTOFiltrosHistoricoParticipacaoTrilha
                    {
                        ddlPontoSebrae     = ddlPontoSebrae.SelectedValue,
                        ddlMissao          = ddlMissao.SelectedValue,
                        rblTipoSolucao     = cblTipoSolucao.Items[0].Selected ? "0" : "1",
                        ddlStatus          = ddlStatus.SelectedValue,
                        usuarioTrilha      = usuarioTrilha,
                        niveisSelecionados = ucSelectNivelOcupacional.RecuperarIdsSelecionados <int>().ToList()
                    };

                    var query = new ManterPontoSebrae().ObterTodosIqueryable();

                    // Recupera ponto sebrae selecionado
                    int idPontoSebraeSelecionado;
                    if (int.TryParse(ddlPontoSebrae.SelectedValue, out idPontoSebraeSelecionado) && idPontoSebraeSelecionado != 0)
                    {
                        query = query.Where(x => x.ID == idPontoSebraeSelecionado);
                    }

                    // Filtrar pro trilha nível
                    query = query.Where(x => x.TrilhaNivel.ID == usuarioTrilha.TrilhaNivel.ID);

                    var niveisSelecionados = ucSelectNivelOcupacional.RecuperarIdsSelecionados <int>();

                    // Filtra pro nível ocupacional
                    query = niveisSelecionados.Any() ?
                            query.Where(x => x.TrilhaNivel.ListaPermissao.Where(p => p.NivelOcupacional != null).Any(p => niveisSelecionados.Contains(p.NivelOcupacional.ID)))
                        : query;

                    var dtoPontoSebrae = query.OrderBy(x => x.ID).Select(p => new DTOPontoSebrae
                    {
                        ID = p.ID.ToString(),
                        NomePontoSebrae = p.NomeExibicao
                    }).ToList();

                    // rptPontosSebrae.DataSource = dtoPontoSebrae;
                    // rptPontosSebrae.DataBind();

                    pnlParticipacaoTrilha.Visible = true;

                    //if (!chkListaCamposVisiveis.Items.FindByValue("CPF").Selected)  CPF.Visible = false;
                    //if (!chkListaCamposVisiveis.Items.FindByValue("DataAlteracaoStatusParticipacao").Selected) DataInclusaoTrilha.Visible = false;
                    //if (!chkListaCamposVisiveis.Items.FindByValue("DataInclusaoTrilha").Selected) DataInclusaoTrilha.Visible = false;

                    //WebFormHelper.ValidarVisibilidadeCamposGrid(dgRelatorio, chkListaCamposVisiveis.Items);
                }
                else
                {
                    pnlParticipacaoTrilha.Visible = false;
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Alerta, "Nenhuma Informação Encontrada");
                }
            }
            catch (AcademicoException ex)
            {
                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, ex.Message);
            }
        }