domingo, 4 de maio de 2008

Indo para o xUnit.net

Novo em testes unitários? Leia este post.

Para quem já conhece teste unitário e possivelmente conhece alguma framework como o NUnit. Em 23 de abril deste ano saiu a versão xUnit.net 1.0 RTM(Release To Market). Para quem quiser migrar, esta página faz um comparativo dos diferentes atributos e asserções (Attributes, Assertions):
http://www.codeplex.com/xunit/Wiki/View.aspx?title=Comparisons&referringTitle=Home

O Nunit já tem 5 anos de idade e tem seus padrões bem e mal sucedidos, este link explica o porquê de ter sido criado o xUnit.net, outra plataforma para testes unitários:
http://www.codeplex.com/xunit/Wiki/View.aspx?title=WhyDidWeBuildXunit&referringTitle=Home

Post sobre a alteração para xUnit.net do MoQ:
http://www.clariusconsulting.net/blogs/kzu/archive/2008/04/22/MoQnowusesxUnitforitsunittests.aspx

Veja o site do xUnit.net:
http://www.codeplex.com/xunit

sábado, 3 de maio de 2008

Trabalhando com dados - GridView

Quando trabalhamos com fontes de dados, há disponível pelo ASP.NET alguns controles para nos auxiliar, como o GridView, o DataList, o DetailsView, FormView e o Repeater. O ASP.NET 3.5 ainda trouxe dois novos controles: ListView e o Repeater.

Os controles são basicamente divididos para exibições de vários registros: GridView, DataList, Repeater e ListView. E exibição de um registro, que é possível usando o DetailsView ou o FormView.

Neste momento vamos falar o GridView, que foi introduzido no ASP.NET 2.0 e substitui o antigo DataGrid. O GridView mostra dados de uma fonte de dados de maneira tabular, onde cada linha do GridView representa uma linha da fonte de dado. O GridView ainda possúi:

  • Ordenação

  • Atualização e exclusão

  • Paginação

  • Seleção de linha

  • Multiplas chaves

  • Multiplos campos de dados para hiperlinks

  • Cutomização de aparencia através de temas(themes) e estilos(styles)

Cada coluna do GridView representa um atributo do registro, no caso do DataTable, um DataColumn. Cada coluna do GridView é uma classe que descende de DataControlField, e as opções são:

Tipo de Coluna

Descrição

BoundField

Mostra o valor de um campo como texto

ButtonField

Mostra um botão de controle

CheckBoxField

Mostra um CheckBox

CommandField

Mostra um botão de comando para editar, inserir ou excluir

HyperLinkField

Mostra um texto como hiperlink

ImageField

Mostra uma imagem

TemplateField

Mostra um conteúdo de acordo com um modelo(Template) do usuário

O GridView ainda tem a propriedade AutoGenerateColumns, que se habilitadade gera automaticamente colunas para o GridView.

Mostrando Dados com o GridView

Podemos fazer bind o GridView com dados através de controles DataSources(SqlDataSource, XMLDataSource, LinqDataSource) ou com qualquer fonte de dados que implemente a interface System.Collections.IEnumerable.

Para fazer bind com controles DataSource deve-se definir a propriedade DataSourceID do GridView com o ID do controle DataSource. Este é preferível em relação ao debaixo, pois provê automaticamente ações como ordenação, atualização, exclusão e paginação.

Para fazer bind com controles que implementam a interface System.Collections.IEnumerable, deve-se através de programação definir a propriedade DataSource e chamar o método DataBind.

Customizando Interface com o Usuário

De maneira mais genérica, podemos customizar a aparência do GridView utilizando Thema e skin. O que permite uma padronização de interface da aplicação Web. Mas podemos também customizar definindo propriedades de estilo de diferentes partes do controle:

Propriedade

Descrição

AlternatingRowStyle

Define o estilo para as linhas alternadas no controle GridView. Quando esta propriedade é definida as linhas do GridView alternam estilos entre RowStyle e AlternatingRowStyle.

EditRowStyle

Define o estilo da linha que está sendo editada no GridView.

EmptyDataRowStyle

Define o estilo das linhas em branco mostradas no GridView, quando a fonte de dados não tem nenhum registro.

FooterStyle

Define o estilo para a linha rodapé do GridView.

HeaderStyle

Define o estilo da linha cabeçalho do GridView.

PagerStyle

Define o estilo do paginador do GridView.

RowStyle

Define o estilo das linhas do GridView. Se a propriedade AlternatingRowStyle é definida as linhas do GridView alternam estilos entre RowStyle e AlternatingRowStyle.

É possível também mostrar ou ocultar o cabeçalho e o rodapé do GridView utilizando respectivamente das propriedades ShowHeader e ShowFooter.

Referências:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview(VS.80).aspx
http://www.microsoft.com/brasil/msdn/Tecnologias/aspnet/ExplorandoGridView.mspx

sexta-feira, 2 de maio de 2008

Bind do DropDownList com uma lista genérica

O DropDownList do ASP.NET pode fazer bind com uma lista genérica(System.Collections.Generic.List), desta forma podemos trabalhar orientado a objetos ou da forma já comum utilizando DataTable. Neste exemplo abaixo criaremos uma classe de Pessoa, criaremos uma lista genérica do tipo Pessoa e faremos o bind com o DropDownList.

Crie um novo site e adicione a classe Pessoa no diretório App_Code, conforme imagem abaixo:

Imagem 1 - Estrutura da aplicação

Coloque duas propriedades na classe pessoa, uma do tipo inteiro Codigo e outra string Nome. Como estamos utilizando o ASP.NET 3.5 podemos fazer conforme código 1:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public class Pessoa
{
public Pessoa(int codigo, string nome)
{
this.Codigo = codigo;
this.Nome = nome;
}

public int Codigo { get; set; }
public string Nome { get; set; }
}
Código 1 - Classe Pessoa(ASP.NET 3.5)

Para quem utiliza o ASP.NET 2.0 deverá escrever conforme Código 2:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public class Pessoa
{
private int codigo;
private string nome;
public Pessoa(int codigo, string nome)
{
this.Codigo = codigo;
this.Nome = nome;
}

public int Codigo
{
get
{
return codigo;
}
set
{
codigo = value;
}
}

public string Nome
{
get
{
return nome;
}
set
{
nome = value;
}
}
}
Código 2 - Classe Pessoa(ASP.NET 2.0)

Na página, adicione um DropDownList no Default.aspx, altere seu nome para ddlPessoa, conforme Imagem 2 :

Imagem 2 - Adicionando o DropDownList ddlPessoa

Visualize o CodeBehind do Default.aspx(Default.aspx.cs) e no evento Page_Load adicione o código conforme código 3, este cria uma lista de pessoas, faz as configurações necessárias no ddlPessoa e chama o método DataBind para adicionar os valores ao DropDownList.

As configurações necessárias no ddlPessoa é definir a fonte de dados que irá montar os itens, isto é feito definindo a propriedade DataSource, configuramos a lista de Pessoa. Também é necessário configurar as propriedades DataValueField e DataTextField, como cada item do nosso DataSource é uma instância de Pessoa, definimos nestes quais as propriedades de Pessoa, neste caso as propriedades Codigo e Nome.

Outra inforamção importante é que estamos usando generics é necessário adicionar o using ao namespace System.Collections.Generic:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;

public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<Pessoa> listaPessoas = new List<Pessoa>();
listaPessoas.Add(new Pessoa(0, "Mateus"));
listaPessoas.Add(new Pessoa(1, "Maria"));
listaPessoas.Add(new Pessoa(2, "Jose"));

ddlPessoa.DataSource = listaPessoas;
ddlPessoa.DataValueField = "Codigo";
ddlPessoa.DataTextField = "Nome";
ddlPessoa.DataBind();
}
}

Código 3 - Código da página Default.aspx.cs

Salve tudo e execute o site, visualize também o HTML gerado.
Imagem 3 - Resultado no navegador

Referências:
http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx
http://digitalcolony.com/2008/01/bind-generic-list-to-aspnet.aspx