// 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)); }
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()); }
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); }