Desenvolvimento - Visual Basic .NET
Utilizando o System.Collections.CollectionBase
Neste artigo explicarei como podemos criar uma coleção customizada, onde utilizaremos o CollectionBase.
por Israel AéceTendo esse problema, o que podemos fazer para termos nossos próprios objetos com suas respectivas propriedades e métodos ao invés de uma genérica? Então neste artigo explicarei como podemos criar uma coleção customizada, onde utilizaremos o CollectionBase.
Esta classe é fornecida através do Namespace System.Collections, criada justamente para essa finalidade. Criaremos uma coleção de Usuários e colocaremos dentro de um controle ASP.NET DataList.
O CollectionBase é uma classe que podemos apenas herdá-la. Ela implementa três interfaces: IList, ICollection e IEnumerable que definem os métodos que aceitam tipos de System.Object. Além disso, ela ainda encapsula um ArrayList, onde ficarão armazenados os elementos da coleção.
Vamos nos dedicar aos seguintes métodos: Add, Contains, Insert, Item e Remove. Explicando cada método:
Function Add
Retorno: Integer
Adiciona um novo Item na Coleção e retorna o indíce (posição) que o objeto foi adicionado.
Function Contains
Retorno: Boolean
Verifica se já existe um determinado objeto dentro da Coleção e retorna um valor boleano indicando ou não sua existência.
Sub Insert
Insere um Item na Coleção em uma determinada posição.
Property Item
Retorna ou Recebe um objeto dado uma posição.
Sub Remove
Remove um objeto da Coleção.
Sub RemoveAt
Remove um objeto da Coleção dado uma posição.
Como dito anteriormente, vamos então criar nossa coleção
customizada. Primeiramente devemos criar a nossa classe Usuario onde conterá as
suas respectivas propriedades. Para isso, criarei uma WebApplication para
criarmos e utilizarmos nossa coleção de exemplo. Depois de criado a
WebApplication no Visual Studio .NET, adicione um novo arquivo *.vb (Class) e
nomeie para Usuario.vb. Nossa classe deverá ficar conforme a estrutura abaixo:
|
|
Código 1 - A Classe Usuário e suas propriedades. |
Como podemos ver acima, criamos a Classe Usuario com as
seguintes propriedades: Nome e Email. Agora devemos criar uma nova Classe
chamada UsuarioColecao que será a nossa Coleção de Usuários. Para isso
adicionarei mais um arquivo *.vb no projeto com o nome: UsuarioColecao.vb. Aqui
devemos herdar o System.Collections.CollectionBase e devemos escrever os
métodos e propriedades (Add, Contains, Insert, Item
e Remove) para trabalharmos apenas com objetos do tipo Usuario,
garantindo assim a "Segurança de Tipos". Veja o código abaixo:
|
|
Código 2 - Coleção de Usuários. |
Acima podemos ver na linha 3 que herdamos a
System.Collections.CollectionBase na nossa classe UsuarioColecao. E para
garantirmos a segurança de tipos da coleção, ou seja, para que todos os métodos
trabalhem apenas com um determinado tipo de objeto (no nosso caso, Usuario),
devemos especificar isso para cada método e propriedade. Para os fãs de
coleções, uma das grandes inovações do Visual Studio .NET Whidbey serão as
coleções genéricas (Generics). Para maiores informações sobre o
Generics: http://download.microsoft.com/download/c/7/f/c7f7a575-79ac-4399-9535-3ed57bc292f2/generics.doc.Bem, agora nossa Classe UsuarioColecao já está pronta para
trabalhar/aceitar apenas objetos do tipo Usuario, criado anteriormente. Vamos
então à um exemplo prático de como usá-las:
Figura 1 - Intellisense já reconhece as propriedades da nossa Classe Usuario. |
Como podem ver na figura 1, criamos um objeto do tipo Usuario e na medida que vamos precisando dele, instanciamos o mesmo (usuario = New Usuario()). Depois de cada objeto criado e atribuído a eles seus respectivos valores, você deve adicioná-lo à coleção de Usuario, qual também já criamos e instanciamos no início do código. Abaixo o código completo:
|
|
Código 3 - Coleção de Usuários. |
Figura 2 - Aceitando apenas objetos do tipo Usuario. |
A figura 2 nos mostra algo bem interessante, pois reparem o método Add que utilizamos para adicionar um novo objeto Usuario em nossa coleção. Ele só aceita um objeto do tipo Usuario. Se tentarmos colocar uma String por exemplo, ele dará erro de compilação.
Como vimos, para todos os métodos (Add, Contains, Insert, Item e Remove) eles apenas irão trabalhar com objetos do tipo Usuario. Como disse no inicio do artigo, vou explicar como popular um controle DataList através de uma Coleção.
Logo após de criar e popular os objetos conforme o código 3, apenas devemos atribuir a Coleção à propriedade DataSource do DataList, e também colocar no HTML as propriedades que deseja exibir. O código abaixo carrega o controle DataList no evento Page_Load do WebForm:
|
|
Código 4 - Carregando o controle DataList (Linha 18 à 21). |
Ainda temos que colocar os campos que desejamos exibir no HTML.
Para isso você deve utilizar as áreas ItemTemplate e
AlternatingItemTemplate. No código abaixo estou exibindo as duas
propriedades (Nome e Email) do objeto Usuario:
|
|
Código 5 - Código HTML do DataList com as propriedades do objeto Usuario. |
Como podem ver abaixo, o controle DataList carregado com
os dados e exibindo as propriedades do objeto Usuario:
Figura 3 - DataList já carregado. |
E quando utilizamos DataGrid não há problemas com relação à paginação como acontece com o DataReader. E também quando for definir as colunas de um DataGrid, ao invés de no campo Data Field do Property Builder, você informar o nome do campo da Base de Dados, você apenas atribui à ele o nome da propriedade que deseja exibir.
E ainda você pode optar por escrever os itens da coleção. Para isso basta executar um laço For...Next e percorrer a coleção e escrever os seus itens. O código abaixo explica como fazer isso:
|
|
Código 6 - Percorrendo e escrevendo os itens da Coleção. |
E o resultado ficará algo como:
Figura 4 - Escrevendo os Itens da Coleção. |
CONCLUSÃO: Neste artigo vimos como é simples construirmos Coleções customizadas derivadas do System.Collections.CollectionBase. Apesar de que para cada objeto, temos que ter uma Coleção específica, onde temos que reescrever cada método para que aceite um determinado objeto. Mas com o Generics as coisas ficaram mais fáceis, mas de qualquer forma, vimos a facilidade de escrever Coleções customizadas e atribuirmos à um controle.
|
- Entity Framework 4: Repositório GenéricoVisual Basic .NET
- As edições 14 da Easy .net Magazine e 88 da .net Magazine já estão disponíveis.ADO.NET
- Postando no Twiiter com .NET e Migre.meC#
- Setup ApplicationsVisual Basic .NET
- Problemas na manipulação de arquivos do MS Excel com .NETVisual Basic .NET