コード例 #1
0
        // ao utilizar valores de parametros padrões o .net entende que esta variavel é opcional.
        // não é possível acrescentar parametros não opcionais apos parametros opcionais tendo que colocar parametros
        public JsonResult Listar(ParametrosPaginacao parametrosPaginacao) // pagina e quantidade de registro por pag
        {
            DadosFiltro dadosFiltrados = NewMethod(parametrosPaginacao);

            // como foi mudado o nome da view criada é necessário passar como parametro aqui
            // é nessário pasasr o formato correto que o bootgrid pede na documentação
            return(Json(dadosFiltrados, JsonRequestBehavior.AllowGet));
        }
コード例 #2
0
        private DadosFiltro <V, D>[] GetFiltro <V, D>(string campoValor, string campoTexto, string tipo, string dataIni, string dataFim,
                                                      int tabela, string campo, uint idFunc, bool incluirTodos, bool separarPorTipo)
            where V : IConvertible
            where D : IConvertible
        {
            campoValor = !String.IsNullOrEmpty(campoValor) ? campoValor : "''";
            campoTexto = !String.IsNullOrEmpty(campoTexto) ? campoTexto : "''";

            string campoRetorno = String.Format("concat(coalesce({0}, ''), ';', coalesce({1}, ''))", campoValor, campoTexto);
            string sql          = "select " + (separarPorTipo ? "concat(tipo, ';', campoRetorno)" : "campoRetorno") + @" as campo
                from (" +
                                  Sql(tipo, dataIni, dataFim, tabela, campo, idFunc, campoRetorno, true) + @"
                ) as temp";

            string tabelas = GetValoresCampo(String.Format(sql, campoRetorno), "campo", "|",
                                             GetParams(tipo, dataIni, dataFim, campo));

            List <DadosFiltro <V, D> > retorno = new List <DadosFiltro <V, D> >();

            if (incluirTodos)
            {
                DadosFiltro <V, D> branco = new DadosFiltro <V, D>();
                branco.Tipo      = "";
                branco.Valor     = default(V);
                branco.Descricao = (D)Convert.ChangeType("Todos", typeof(D));

                retorno.Add(branco);
            }

            foreach (string t in tabelas.Split('|'))
            {
                try
                {
                    string[] dadosTabela = t.Split(';');

                    DadosFiltro <V, D> novo = new DadosFiltro <V, D>();
                    if (separarPorTipo)
                    {
                        novo.Tipo      = dadosTabela[0];
                        novo.Valor     = (V)Convert.ChangeType(dadosTabela[1], typeof(V));
                        novo.Descricao = (D)Convert.ChangeType(dadosTabela[2], typeof(D));
                    }
                    else
                    {
                        novo.Valor     = (V)Convert.ChangeType(dadosTabela[0], typeof(V));
                        novo.Descricao = (D)Convert.ChangeType(dadosTabela[1], typeof(D));
                    }

                    retorno.Add(novo);
                }
                catch { }
            }

            return(retorno.ToArray());
        }
コード例 #3
0
        private DadosFiltro NewMethod(ParametrosPaginacao parametrosPaginacao)
        {
            /*// obterá: sort[Titulo] || sort[Autor] || sort[AnoEdicao] || sort[Valor]
             *          string chav = Request.Form.AllKeys.Where(k => k.StartsWith("sort")).FirstOrDefault();
             *          // cariavel que recebe a ordenação do formulario
             *          string ordenacao = Request[chav];
             *          string campo = chav.Replace("sort[", string.Empty).Replace("]", string.Empty);*/
            var livros = db.Livros.Include(l => l.Genero);

            int total = livros.Count();

            // verifica campo searchPhrase está vazio
            if (!String.IsNullOrWhiteSpace(parametrosPaginacao.SearchPhrase))
            {
                // int e decimal auxiliares para realizar a validação
                int     ano   = 0;
                decimal valor = 0.0m;
                // int.tryparse verifica se uma string tem o valor de um inteiro caso seja atribui o valor inteiro para a variavel
                int.TryParse(parametrosPaginacao.SearchPhrase, out ano);
                // decimal.tryparse verigica se o valor contino na string é decimal caso seja atribui o valor decimal para a variavel
                decimal.TryParse(parametrosPaginacao.SearchPhrase, out valor);
                // utilizando linq.dynamic para procurar pela frase inserida
                livros = livros.Where("Titulo.Contains(@0) OR Autor.Contains(@0) OR AnoEdicao == @1 OR Valor == @2", parametrosPaginacao.SearchPhrase, ano, valor);
            }

            /*
             * // caso o titulo não seja nulo nem contenha valores em branco
             * if (!String.IsNullOrWhiteSpace(livro.Titulo))
             * {
             *  // retorna a lista de livros que contenha o titulo passado
             *  livros = livros.Where(l => l.Titulo.Contains(livro.Titulo));
             * }
             * if (!String.IsNullOrWhiteSpace(livro.Autor))
             * {
             *  // retorna a lista de livros que contenha o autor informado
             *  livros = livros.Where(l => l.Autor.Contains(livro.Autor));
             * }
             * if (livro.AnoEdicao != 0)
             * {
             *  // retorna a lista de livros que contenha o ano informado
             *  livros = livros.Where(l => l.AnoEdicao.ToString().Contains(livro.AnoEdicao.ToString()));
             * }
             * if (livro.Valor != decimal.Zero)
             * {
             *  // retorna a lista de livros que contenha o valor informado
             *  livros = livros.Where(l => l.Valor.ToString().Contains(livro.Valor.ToString()));
             * }*/

            // variavel auxioliar com o campo e a ordenacao
            // string campoOrdenacao = string.Format("{0} {1}", campo, ordenacao);
            // usando Linq

            // Skip((pag-1)*regis): pagina - 1 x registros por pagina
            // dessa forma toda a cada pagina pularemos os registros que já estão na pagina anterior
            var livrosPaginados = livros.OrderBy(parametrosPaginacao.CampoOrdenado).Skip((parametrosPaginacao.Current - 1) * parametrosPaginacao.RowCount).Take(parametrosPaginacao.RowCount); // utilizando linq.dynamic

            DadosFiltro dadosFiltrados = new DadosFiltro(parametrosPaginacao)
            {
                rows  = livrosPaginados.ToList(),
                total = total
            };

            return(dadosFiltrados);
        }