[ASP .NET] Simplificando o ListView

Hoje trago uma forma muito simples para preencher um ListView do ASP.NET. Utilizando o ListView, é possível separar o código HTML da linguagem de programação, criando um modelo bem próximo do que será renderizado no navegador.

Criando o modelo com ListView

Veja abaixo o código da página ASP.NET.

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html>
<html>
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <ul>
        <asp:ListView ID="ListView1" runat="server">
            <ItemTemplate>
                <li><asp:Label ID="Label1" runat="server" Text='<%# Eval("Nome")%>'/></li>
            </ItemTemplate>
        </asp:ListView>
    </ul>
    <asp:Button ID="Button1" runat="server" Text="Button" />
    </form>
</body>
</html>

Vamos entender o código.

Resultado da Página com ListView

Resultado da Página com ListView

Dentro da tag <form>, adicionei um tag <ul> e dentro dela criei um objeto ListView. Por que isso? Se atribuirmos ao DataSource desse ListView uma lista de objetos (faremos a seguir), a formatação que for declarada dentro do ListView, irá se repetir. No nosso caso, adicionamos a tag <ItemTemplate>que é necessária para criarmos o modelo de cara item que será exibido e dentro dela adicionamos a tag <li>, que será repetida para cada item do DataSource que for atribuido. Ainda no <li> nós adicionamos um controle <asp:Label /> e é aqui que mora um segredo. Atribuímos à propriedade desse controle a instrução Eval(“Nome”)*. A expressão Eval é utilizada para vincular uma propriedade da fonte de dados (DataSource) que será atribuída, no nosso caso ao ListView, com a propriedade do controle onde ela está. Ou seja, estou  vinculando a propriedade Nome da fonte de dados, com a propriedade Text do Label. Perceba que isso só é possível porque o Label está dentro do ListView que receberá a fonte de dados.

* “<%#” e “%>”, indicam que será utilizado um comando da linguagem de programação dentro do código HTML.

Preenchendo o ListView

Agora veremos com preencher o ListView que acabamos de criar. Veja no código HTML que criei um botão (<asp:Button />), no evento de clique desse botão é que vamos adicionar o código necessário para atribuirmos dados ao ListView.

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim lista As New List(Of NOMES)

        lista.Add(New NOMES("Nome 1"))
        lista.Add(New NOMES("Nome 2"))
        lista.Add(New NOMES("Nome 3"))
        lista.Add(New NOMES("Nome 4"))

        ListView1.DataSource = lista
        ListView1.DataBind()
    End Sub

Acima vemos a procedure do botão, nela nos criamos um objeto chamado lista do tipo List(Of NOMES). Adicionamos alguns itens à lista e em seguida atribuímos à propriedade DataSource do ListView a nossa lista. Por último, executamos o método DataBind(), que segundo o MSDN:

“Vincula uma fonte de dados para o controle de servidor invocado e todos os seus controles filho.”

Mas, ainda falta um trecho do código. Falta a classe NOMES. Abaixo vemos o código completo do arquivo de código da página (CodeFile).

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim lista As New List(Of NOMES)

        lista.Add(New NOMES("Nome 1"))
        lista.Add(New NOMES("Nome 2"))
        lista.Add(New NOMES("Nome 3"))
        lista.Add(New NOMES("Nome 4"))

        ListView1.DataSource = lista
        ListView1.DataBind()
    End Sub
End Class

Class NOMES
    Public _Nome As String

    Sub New(ByVal nome As String)
        Me.Nome = nome
    End Sub

    Public Property Nome As String
        Get
            Return _Nome
        End Get
        Set(ByVal value As String)
            _Nome = value
        End Set
    End Property
End Class

Dentro da classe NOMES, criei uma propriedade chamada Nome e essa propriedade que passamos ao método Eval() como vimos acima.

É possível ainda, vincular um DataSource diretamente ao ListView, junto a sua declaração, mas isso fica para outro post :-).

Até uma próxima!

Criando propriedades para classes no VB .NET

No post de hoje trago algo que abordei ligeiramente na vídeo aula Como carregar um ComboBox de maneira bem fácil, que são as propriedades de uma classe. Como bom objeto, as classe que você cria tem propriedades, como uma propriedade qualquer de um objeto qualquer. Cito aqui, por exemplo, a propriedade .Text do objeto TextBox.

Conceito dass Propriedade

É algo muito simples, porém, essencial para abordar um dos aspectos da Orientação a Objetos, que é o encapsulamento. Criando um classe e definindo suas propriedades, esses dados podem ser tratados dentro dessa classe mantendo a integridade que fora definida para cara propriedade.

Algo que deixa bastante claro essa questão do encapsulamento, são as propriedades de posicionamento de um formulário de uma aplicação em VB.NET ou C#. Você pode, por exemplo, resgatar a coordenada x de um formulário utilizando o comando:

MessageBox.Show(Formulario.Location.X)

Entretanto, ao tentar entrar com um valor para tal propriedade, receberá um mensagem de erro informando que isso não é possível. Para tanto, é necessário criar um nova localização, informando tanto x quanto y. O que é feito quanto isso acontece, fica por conta da regra utilizada para o deslocamento de um formulário, ou seja, o encapsulamento garante, tanto que os dados passados sejam tratadas da maneira correto, quanto protege a integridade da propriedade.

Criando propriedades para classes

Vamos agora ver exatamente como criar as propriedades. Abaixo está o código para a criação de duas propriedades para a classe que chamei de Dados. Em seguida explico o código.

Public Class Dados
    Private _Nome As String
    Private _ID As Integer

    Public Property Nome() As String
        Get
            Return _Nome
        End Get
        Set(ByVal value As String)
            _Nome = value
            _ID = New Random().Next(1, 10000)
        End Set
    End Property

    Public ReadOnly Property Identificador() As Integer
        Get
            Return _ID
        End Get
    End Property
End Class

Acima temos dois tipos bem diferentes de propriedades. A primeira, Nome, tanto pode ser utilizada para atribuir um valor via instancia, quanto pode  ter seu valor lido. Já a segunda, só pode ter o seu valor lido. A segui, explico linha a linha o que está acontecendo.

Linha 1: declaração da classe Dados;

Linhas 2 e 3: são declaradas duas variáveis que serão utilizadas para armazenar os valores atribuídos às propriedades;

Linha 5: declaro a primeira propriedade, Nome, ela é pública e do tipo String;

Linhas 6, 7 e 8: utilizo o comando Get para informar o que deve ser feito quanto o tentarem ler o que está na propriedade. Neste caso, somente retorno o que fora atribuído. Poderia por exemplo, aplicar a função Trim,  Replace ou mesmo ToUpper, como a propriedade pertence a classe pode ser feito qualquer coisa, inclusive retornar sempre uma String vazia;

Linhas 9, 10, 11 e 12: utilizo o comando Set, para criar os procedimentos que devem ser realizados quando for atribuído um valor à propriedade. Neste caso, simplesmente passo o valor que for atribuído, para a variável que criei anteriormente. Na declaração, é criado um parâmetro, que deve ser do mesmo tipo da propriedade. Mas, uma coisa interessante que adicionei, é que quando for atribuído um nome, a propriedade ID recebe um valor aleatório (entre 1 e 10000);

Linha 13: finalizo a declaração da propriedade Nome;

Linha 15: declaro a propriedade ID, publica do tipo Integer. Porém, diferente da anterior, adicionei a instrução ReadOnly, informando que não pode ser atribuído valor a esta variável por meio de uma instância da classe.

Linhas 16, 17 e 18: utilizo o comando Get para informar o que deve ser feito quanto o tentarem ler o que está na propriedade.

Linha 19: finalizo a declaração da propriedade ID;

Linha 20: finalizo o código da classe;

No momento que a classe for instanciada, ocorreria o seguinte:Classe criada quando instanciadaVeja que conseguimos atribuir um valor à propriedade Nome, porém, quando tentamos com o Identificador, é informado que esta propriedade é somente leitura.

E como resultado disso tudo, corrigindo o erro, temos:

Resultado do código

E dessa forma, você pode trabalhar suas classes, criando regras de negócios para seu sistema e mantendo a integridades dos dados.

Até um próxima!

Trabalhando com Classes VB .NET

.netNessa video aula veremos como trabalhar com classes no Visual Basic .NET utilizando o padrão MVC[bb], importante quando se utiliza a programação orientada a objetos[bb]. Com isso é possível reutilizar o código com o mínimo de alterações possível.

Melhor Visualização em Tela Cheia. (Disponível em HD)

Vídeo

Importando Class Library utilizando .NET

vb_Net_Hinfos_marca

Olá galera adiantando essa video aula, o pessoal pediu então resolvi “solta-la”, porque não paramos no natal.

Nessa video aula daremos continuidade a aula de Class Library. Dessa vez veremos como importar a classe criada no VB .NET[bb] e no C#[bb], mostrando a facilidade de importação das classes entre as linguagens da plataforma .NET.

Melhor Visualização em Tela Cheia

Vídeo

Criando Class Library no VB .NET

vb_Net_Hinfos_marcaNessa video aula veremos como criar uma Class Library (Biblioteca de Classes) no Visual Basic .NET. Por meio de uma class library é possível implementar uma clase em um projeto escrito em outra linguagem da plataforma .NET[bb], como por exemplo, o C#[bb].

Melhor Visualização em Tela Cheia