protected void btnSalvar_Click(object sender, EventArgs e)
        {
            PermissoesBL perBL = new PermissoesBL();
            Permissoes permissao = new Permissoes();

            foreach (RepeaterItem item in repPermissao.Items)
            {
                permissao.Id = utils.ComparaIntComZero(((TextBox)item.FindControl("txtId")).Text);
                permissao.CategoriaId = utils.ComparaIntComZero(((TextBox)item.FindControl("txtCategoriaId")).Text);
                permissao.FormularioId = utils.ComparaIntComZero(((TextBox)item.FindControl("txtFormularioId")).Text);
                permissao.Consultar = ((CheckBox)item.FindControl("chkConsultar")).Checked;
                permissao.Editar = false;
                permissao.Inserir = false;
                permissao.Excluir = false;

                if (permissao.CategoriaId > 0 && permissao.FormularioId > 0)
                {
                    if (permissao.Id > 0)
                    {
                        if (perBL.EditarBL(permissao))
                            ExibirMensagem("Permissões atualizadas com sucesso !");
                        else
                            ExibirMensagem("Não foi possível gravar as permissões. Revise as informações.");
                    }
                    else
                    {
                        if (perBL.InserirBL(permissao))
                            ExibirMensagem("Permissões gravadas com sucesso !");
                        else
                            ExibirMensagem("Não foi possível gravar as permissões. Revise as informações.");
                    }
                }
            }
        }
        //evento pre-definido
        private void PreRequestHandlerExecute(Object source, EventArgs e)
        {
            //obtem dados da aplicacao http (site)
            application = (HttpApplication)source;
            context = application.Context;
            //obtem o nome do arquivo que está sendo acessado
            string origem = context.Request.FilePath;
            if (!origem.Contains("aspx") || origem.Contains("WebForm1") || origem.Contains("Rel") || origem.Contains("default.aspx") || origem.Contains("Pesquisar.aspx") || origem.Contains("PesquisarItens.aspx") || origem.Contains("recuperacaoLogin.aspx") || origem.Contains("ops.aspx"))
            {
                return;
            }
            //se houver usuario logado, e o site já estiver carregado
            //verifica qual é o usuario para definir permissoes de acesso
            //se nao houver usuário logado, sempre direciona para a tela de login
            if (context.Session != null && context.Session["usuario"] == null)
            {
                //somente chama a tela de login se a origem nao for a propria tela
                //faz isso, pois no primeira acesso é solicitada a tela de login
                if (!origem.Contains("login.aspx"))
                {
                    //chama a tela de login
                    context.Response.Redirect("~/login.aspx", true);
                }
            }
            else
            {
                //exemplo
                //Cria objeto usuario local, baseado no objeto da sessao
                List<Usuarios> usuarios = (List<Usuarios>)context.Session["usuario"];
                PermissoesBL perBL = new PermissoesBL();

                foreach (Usuarios ltUsu in usuarios)
                {
                    List<Permissoes> permissoes = perBL.PesquisarBL(ltUsu.CategoriaId, origem);

                    if (permissoes.Count == 0 && !origem.Contains("erroPermissao.aspx"))
                    {
                        context.Session["usuPermissoes"] = null;
                        context.Response.Redirect("~/erroPermissao.aspx?nomeUsuario=" + ltUsu.Nome, true);
                    }
                    else
                        if (!origem.Contains("erroPermissao.aspx"))
                        {
                            Permissoes per = new Permissoes();

                            per.Editar = permissoes[0].Editar;
                            per.Excluir = permissoes[0].Excluir;
                            per.Inserir = permissoes[0].Inserir;

                            context.Session["usuPermissoes"] = per;
                        }
                }

            }
        }
        //public void JQueryValor(string CssClass, Int16 Maximo, Int16 CasasDecimais)
        //{
        //    Page.ClientScript.RegisterClientScriptInclude("jQueryPriceFormat", Page.ResolveClientUrl("~/javascript/jquery.price_format.1.4.js"));
        //    string script = " $(document).ready(function () { " +
        //                   " $('." + CssClass + "').priceFormat({" +
        //                   "     limit: " + Maximo.ToString() + "," +
        //                   "     centsLimit: " + CasasDecimais.ToString() + "," +
        //                   "     prefix: ''," +
        //                   "     centsSeparator: ','," +
        //                   "     thousandsSeparator: '.'" +
        //                   " });" +
        //                "});";
        //    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "JQueryMask" + CssClass, script, true);
        //}
        private void CarregarMenuPermissoes()
        {
            PermissoesBL perBL = new PermissoesBL();

            DataSet ds = perBL.PesquisarPermissoesBL(utils.ComparaIntComZero(hfIdCategoria.Value));

            ds.Tables[0].TableName = "tblCategorias";
            ds.Tables[1].TableName = "tblSubCategoria";

            //Relação para o segundo repeater (SubCategorias)
            ds.Relations.Add("SubCategorias",
                  ds.Tables["tblCategorias"].Columns["DESMODULO"],
                  ds.Tables["tblSubCategoria"].Columns["DESMODULO"]);
            ds.Relations[0].Nested = true;

            rptMenu.DataSource = ds.Tables["tblCategorias"];
            rptMenu.DataBind();
        }
        private void Pesquisar(int id_cat, string modulo)
        {
            DataTable tabela = new DataTable();

            DataColumn coluna1 = new DataColumn("ID", Type.GetType("System.Int32"));
            DataColumn coluna2 = new DataColumn("CONSULTAR", Type.GetType("System.Boolean"));
            DataColumn coluna3 = new DataColumn("EDITAR", Type.GetType("System.Boolean"));
            DataColumn coluna4 = new DataColumn("INSERIR", Type.GetType("System.Boolean"));
            DataColumn coluna5 = new DataColumn("EXCLUIR", Type.GetType("System.Boolean"));
            DataColumn coluna6 = new DataColumn("FORMULARIOID", Type.GetType("System.Int32"));
            DataColumn coluna7 = new DataColumn("CODFORMULARIO", Type.GetType("System.Int32"));
            DataColumn coluna8 = new DataColumn("DESCFORMULARIO", Type.GetType("System.String"));
            DataColumn coluna9 = new DataColumn("TIPO", Type.GetType("System.String"));
            DataColumn coluna10 = new DataColumn("CATEGORIAID", Type.GetType("System.Int32"));

            tabela.Columns.Add(coluna1);
            tabela.Columns.Add(coluna2);
            tabela.Columns.Add(coluna3);
            tabela.Columns.Add(coluna4);
            tabela.Columns.Add(coluna5);
            tabela.Columns.Add(coluna6);
            tabela.Columns.Add(coluna7);
            tabela.Columns.Add(coluna8);
            tabela.Columns.Add(coluna9);
            tabela.Columns.Add(coluna10);

            FormulariosBL forBL = new FormulariosBL();
            List<Formularios> formularios = forBL.PesquisarBL(modulo);

            PermissoesBL perBL = new PermissoesBL();
            List<Permissoes> permissoes;

            foreach (Formularios formu in formularios)
            {
                DataRow linha = tabela.NewRow();

                linha["FORMULARIOID"] = formu.Id;
                linha["CODFORMULARIO"] = formu.Codigo;
                linha["DESCFORMULARIO"] = formu.Descricao;
                linha["CATEGORIAID"] = id_cat;

                switch (formu.Tipo.ToUpper())
                {
                    case "C":
                        {
                            linha["TIPO"] = "Edição";
                            break;
                        }
                    case "V":
                        {
                            linha["TIPO"] = "Consulta";
                            break;
                        }
                }

                permissoes = perBL.PesquisarBL(id_cat, formu.Id);

                if (permissoes.Count > 0)
                {
                    foreach (Permissoes per in permissoes)
                    {
                        linha["Id"] = per.Id;
                        linha["CONSULTAR"] = per.Consultar;
                        linha["EDITAR"] = per.Editar;
                        linha["INSERIR"] = per.Inserir;
                        linha["EXCLUIR"] = per.Excluir;
                    }
                }
                else
                {
                    linha["Id"] = 0;
                    linha["CONSULTAR"] = false;
                    linha["EDITAR"] = false;
                    linha["INSERIR"] = false;
                    linha["EXCLUIR"] = false;
                }

                tabela.Rows.Add(linha);
            }

            repPermissao.DataSource = tabela;
            repPermissao.DataBind();
        }