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.

   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>
 
 
 
Demo em execução

 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

Olá Pessoal,

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

Olá , Pessoal
Estou um pouco ocupado trabalhando com EXTJS com ASP MVC 3 e está um pouco difícil , mas , me sobrou um tempinho para mandar uma dica que achei super útil. Ordenar um GENERIC LIST de modo dinâmico.
 
        /// <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

Olá , Pessoal

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 ou list generic em uma DataTable com exemplo que vou mostrar para vocês como popular um GridView com uma DataTable que tem como base de informações um 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();
        }

       
    }
}
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>

Segue link para baixar o codigo completo.

Download
Espero que gostem .

Até a próxima !

Translate