Search This Blog
Showing posts with label C#. Show all posts
Showing posts with label C#. Show all posts
Thursday, 30 October 2014
01-Teste do WebApi
Vou mostrar um pouquinho do que sei sobre o assunto SPA ( Single-page Applications ) iremos utilizar WebApi e Extjs.
Se você nunca trabalhou com ASP WebApi esse tutorial é para você.
Dividi esse tutorial em 3 partes
- 01 - Teste do WebApi
- 02 - Desenvolvimento do BackEnd
- 03 - Desenvolvimento do FrontEnd
Wednesday, 8 January 2014
Reflection Generic List , Generic Method
Tudo bem pessoal,
Bom ano para vocês.
Fiquei um bom tempo para achar essa facilidade que vou compartilhar com vocês, é um caminho para fazer uma consulta de forma genérica não importa que método "Contains,StartsWith" com Linq e Generic utilizando reflection .
Vou tentar fazer um exemplo de forma simples para melhor compreensão da funcionalidade.
C# Code
Primeiro criei uma classe básica para servir de base para a consulta.
Demo em execução
Acredito que isso ajuda muito com o caso de filtros dinâmicos com Contains independente da propriedade.
Até a próxima.
Américo
Bom ano para vocês.
Fiquei um bom tempo para achar essa facilidade que vou compartilhar com vocês, é um caminho para fazer uma consulta de forma genérica não importa que método "Contains,StartsWith" com Linq e Generic utilizando reflection .
Vou tentar fazer um exemplo de forma simples para melhor compreensão da funcionalidade.
C# Code
Primeiro criei uma classe básica para servir de base para a consulta.
1: public class Pessoa
2: {
3: public string Nome { get; set; }
4: public string SobreNome { get; set; }
5: public void Popular(){
6: Lista = new List<Pessoa>();
7:
8: Pessoa _p = new Pessoa();
9: _p.Nome = "Americo";
10: _p.SobreNome = "Arvani";
11: Lista.Add(_p);
12:
13: _p = new Pessoa();
14: _p.Nome = "João";
15: _p.SobreNome = "Maria";
16: Lista.Add(_p);
17:
18: _p = new Pessoa();
19: _p.Nome = "Jose";
20: _p.SobreNome = "Da Silva";
21: Lista.Add(_p);
22: }
23: public List<Pessoa> Lista;
24: }
E depois a classe para fazer a LAMBDA dinâmica
1: public static class LambdaExpressionHelper<T>
2: {
3:
4: /// <summary>
5: /// Metodo para consultar de forma generica LAMBDA
6: /// </summary>
7: /// <param name="propertyName">Nome da Propriedade</param>
8: /// <param name="method">Metodo</param>
9: /// <param name="args">Valor</param>
10: /// <returns>Lambda Expression</returns>
11: public static Expression<Func<T, bool>>
12: Build(string propertyName, string method, params object[] args)
13: {
14:
15: var propertyInfo = typeof(T).GetProperty(propertyName);
16:
17: var e = Expression.Parameter(typeof(T), "e");
18: var m = Expression.MakeMemberAccess(e, propertyInfo);
19:
20: var mi = m.Type.GetMethod(method, args.Select(a => a.GetType()).ToArray());
21: var c = args.Select(a => Expression.Constant(a, a.GetType())).ToArray();
22:
23: Expression call = Expression.Call(m, mi, c);
24:
25: Expression<Func<T, bool>> lambda =
Expression.Lambda<Func<T, bool>>(call, e);
26: return lambda;
27: }
28: }
E por ultimo um evento click em um botão para executar
1: protected void btnExecClick(object sender, EventArgs e)
2: {
3: Pessoa p = new Pessoa();
4: p.Popular();
5:
6: var expr = LambdaExpressionHelper<Pessoa>.Build(txtCampo.Text, "StartsWith",
txtValor.Text);
7:
8: var l = p.Lista.Where(expr.Compile());
9:
10: GridView1.DataSource = l;
11: GridView1.DataBind();
12: }
HTML/ASPX
1: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="aarvanilab.Default" %>
2:
3: <!DOCTYPE html>
4:
5: <html xmlns="http://www.w3.org/1999/xhtml">
6: <head runat="server">
7: <title></title>
8: </head>
9: <body>
10: <form id="form1" runat="server">
11: <div>
12:
13: <asp:TextBox ID="txtCampo" runat="server" Text="Campo"/>
14: <asp:TextBox ID="txtValor" runat="server" Text="Valor"/>
15:
16: <asp:Button ID="Button1" runat="server" Text="Executar" OnClick="btnExecClick" />
17:
18: <asp:GridView ID="GridView1" runat="server">
19: </asp:GridView>
20: </div>
21: </form>
22: </body>
23: </html>
Nessa execução consultei o campo "Nome" com os dados que iniciam com a letra A, no caso meu nome
Nessa execução consultei o campo "Nome" com os dados que iniciam com a letra J, com os dados restantes
Acredito que isso ajuda muito com o caso de filtros dinâmicos com Contains independente da propriedade.
Até a próxima.
Américo
Wednesday, 12 September 2012
Agrupar Generic List Usando Reflection
Conforme tinha falado , estou enviando mais um ajudinha para agrupar dados de uma lista do tipo generics object.
/// <summary> /// Método para agrupar itens da lista dinamico /// </summary> /// <param name="_property"> Propriedade da lista</param> /// <param name="_list"> Lista que gostaria de Agrupar</param> /// <returns>Lista Agrupada</returns> public List<Entidade.Pedido> DoGroup( string _property, List<Entidade.Pedido> _list ) { _list.GroupBy(c => new { typeof(Entidade.Pedido).GetProperty(_property).Name }); return _list; }Até a próxima.
Tuesday, 11 September 2012
Ordenar um GENERIC LIST de modo dinâmico usando Reflection
/// <summary>
/// Método para ordernar itens da lista dinamico
/// </summary>
/// <param name="_property"> Propriedade da lista </param>
/// <param name="_direction"> Direção </param>
/// <param name="_list"> Lista que gostaria de ordenar</param>
/// <returns>Lista Ordenada</returns>
public List<Entidade.Pedido> DoOrder (
string _property ,
string _direction ,
List<Entidade.Pedido> _list
)
{
if (_direction == "ASC")
{
_list = _list.OrderBy(plist => typeof(Entidade.Pedido).GetProperty(_property).GetValue(plist, null)).ToList();
}
if (_direction == "DESC")
{
_list = _list.OrderByDescending(plist => typeof(Entidade.Pedido).GetProperty(_property).GetValue(plist, null)).ToList();
}
return _list;
}
Espero que tenham gostado e vou trazer coisas novas.
Monday, 30 April 2012
De Gereric List para DataTable
Depois de um bom tempo sem postar nada volto eu , para falar sobre uma funcionalidade que achei super interessante , estou voltando a trabalhar com ASP webforms e algumas coisas que estou achando legal vou começar a compartilhar com vocês.
Como exemplo a maioria dos componentes do ASP webforms trabalhão com ADO.NET para persistência de dados , por conta disso temos as vezes , a necessidade de transformar uma lista do tipo LIST
Exemplo:
Arquivo : DbTools.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.ComponentModel; namespace aarvaniExample1 { public class DbTools { /// <summary> /// Método para conversão de uma lista tipo generic LIST<T> para DataTable /// </summary> /// <param name="data"> List<T></param> /// <returns>DataTable</returns> public static DataTable ConvertListToDataTable(List<Object> data) { //Pegar o primeiro registro e listar suas propriedades PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(data.FirstOrDefault()); //Criar e instanciar a tabela auxiliar em memória DataTable table = new DataTable(); //Consultar item a item das propriedades foreach (PropertyDescriptor prop in properties) //Adicionar programaticamente a coluna com seus respectivos tipos table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType); //Consultar coluna a coluna da tabela auxiliar foreach (Object item in data) { //Criar e instanciar a linha DataRow row = table.NewRow(); //Consultar item a item das propriedades foreach (PropertyDescriptor prop in properties) //Adicionar o valor da linha na coluna caso não seja nulo row[prop.Name] = prop.GetValue(item) ?? DBNull.Value; table.Rows.Add(row); } //Retornar a tabela return table; } } }
Arquivo : Pedido.cs
namespace Entidade { /// <summary> /// Classe pedido /// </summary> public class Pedido { #region Propriedades public int Numero { get; set; } public int ClienteCodigo { get; set; } public double Valor { get; set; } public string Prazo { get; set; } public decimal Quantidade { get; set; } #endregion #region Listas public static List<Pedido> Lista { get; set; } #endregion } }
Arquivo : pedidos_lista.aspx
CODE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace aarvaniExample1
{
public partial class pedidos_lista : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Popular dados
Entidade.Pedido ped = new Entidade.Pedido();
ped.ClienteCodigo = 1;
ped.Numero = 123;
ped.Prazo = "30/60";
ped.Quantidade = 1;
ped.Valor = 1;
Entidade.Pedido.Lista = new List<Entidade.Pedido>();
Entidade.Pedido.Lista.Add(ped);
List<object> List = new List<object>();
List.AddRange(Entidade.Pedido.Lista);
gvListaPedidos.DataSource = DbTools.ConvertListToDataTable(List);
gvListaPedidos.DataBind();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace aarvaniExample1
{
public partial class pedidos_lista : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Popular dados
Entidade.Pedido ped = new Entidade.Pedido();
ped.ClienteCodigo = 1;
ped.Numero = 123;
ped.Prazo = "30/60";
ped.Quantidade = 1;
ped.Valor = 1;
Entidade.Pedido.Lista = new List<Entidade.Pedido>();
Entidade.Pedido.Lista.Add(ped);
List<object> List = new List<object>();
List.AddRange(Entidade.Pedido.Lista);
gvListaPedidos.DataSource = DbTools.ConvertListToDataTable(List);
gvListaPedidos.DataBind();
}
}
}
SOURCE
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="pedidos_lista.aspx.cs" Inherits="aarvaniExample1.pedidos_lista" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="gvListaPedidos" AutoGenerateColumns="true" runat="server" /> </div> </form> </body> </html>
Espero que gostem .
Até a próxima !
Subscribe to:
Posts (Atom)

