ASP.NET - Usando o controle Repeater


O controle de servidor Repeater é um container básico que permite a você criar uma lista de qualquer informação que deseja em uma página Web. Ele não tem uma aparência definida , é você que molda o layout do controle usando templates(modelos). Quando você executa a página o controle Repeater faz uma interação através dos dados na fonte de dados e renderiza um item para cada dado.

Para usar o controle Repeater você cria templates que define o layout do conteúdo do controle. Estes templates podem conter qualquer combinação válida de texto Html e controles na página web. Se você não definir nenhum template ou os templates não contiverem elementos , ele não vai ser visível na página.

Os templates possíveis em um controle Repeater são :

Template Descrição
ItemTemplate Os elementos são renderizados para cada linha da fonte de dados. Para exibir dados em um ItemTemplate você inclui um controle web ou html para o template e vincula o controle a fonte de dados - datasource.
AlternatingItemTemplate Os elementos são renderizados para outras linhas da fonte de dados.
HeaderTemplate / FooterTemplate Os elementos são renderizados ou antes ou depois das linhas dos dados vinculados serem renderizados.
SeparatorTemplate Os elementos são renderizados entre cada linha tais como <BR> , <HR> ou virgulas.

Para exibir as informações você precisa vincular a fonte de dados a propriedade DataSource. Ele não permite edição ou seleção. Você pode usar como fonte de informações qualquer controle que suporte a interface IEnumerable. ( DataList, DataSet , DataView , Arrays , etc..)

A sintaxe para a vinculação de controles ao controle Repeater usa o 'Container' como fonte de dados, desde que o Repeater é o controle para todos os controles.Ex:  <%# DataBinder.Eval(Container , "DataItem.Nome") %>

Após fazer a vinculação usando a propriedade DataSource  você deve invocar o método DataBind.

Vejamos um exemplo prático. Suponha que você tenha uma tabela com dados e que você quer exibir esses dados em uma página WEB. Como exemplo eu vou usar uma tabela chamada clientes presente em um banco de dados Access - clientes.mdb.  Eu vou exibir os dados relativos aos campos Nome e Endereco usando o controle Repeater. Veja abaixo o código:

O código do arquivo clientes.aspx é dado abaixo. Para testar você deve copiá-lo para o seu diretório de trabalho configurado no IIS.

<%@ Page Language="VB" ClientTarget="uplevel" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>

<script runat="server">

Dim oReader As OleDbDataReader

Sub Page_Load(Sender As Object, E As EventArgs)

'define um objeto DataAdapter
Dim oDadapter As OleDbDataAdapter
'define a string sql para selecionar o nome e a cidade da tabela Clientes ordenados pelo nome
Dim Sql As String = "SELECT nome, Endereco FROM clientes ORDER BY nome"
'Cria a conexao com o banco de dados clientes.mdb e cria o DataAdapter
Dim oConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Clientes.mdb")
oDadapter = New OleDbDataAdapter(Sql, oConnection)

'define o objeto DataSet
Dim oDataSet As New DataSet()
'Abre a conexão
oConnection.Open
'Preenche o DataSet
oDadapter.Fill(oDataSet, "clientes")

'configura a propriedade DataSource do controle Repeater e vincula
Clientes.DataSource = oDataSet.Tables("clientes").DefaultView
Clientes.DataBind()
End Sub
</script>

<html>
<head>
</head>
<body bgcolor="#0c99c0" leftmargin="0" topmargin="0" marginheight="0" marginwidth="0">
<form runat="server">
<h1><%response.write("Relação de Clientes")%>
</h1>
<table cellspacing="0" cellpadding="5" border="0">
<tbody>
<tr valign="top">
<td bgcolor="#33cc99">

<asp:Repeater id="clientes" runat="server">

<HeaderTemplate>
    <table cellpadding="1" cellspacing="1" border="0" style="font: 10pt verdana">
    <tr height="2" bgcolor="#0099CC">
    <td colspan="2"></td>
    </tr>
    <tr bgcolor="#0099CC">
    <td>
    <font color="#FF0000"><b>Nome</b></font></td>
    <td>
   <font color="#FF0000"><b>Endereco</b></font></td>
   </tr>
</HeaderTemplate>

<ItemTemplate>
   <tr bgcolor="#669999">
   <td>
   <%# DataBinder.Eval(Container.DataItem, "Nome") %></td>
   <td>
   <%# DataBinder.Eval(Container.DataItem, "Endereco") %></td>
   </tr>
</ItemTemplate>

 <AlternatingItemTemplate>
    <tr bgcolor="#ffdead">
   <td>
   <%# DataBinder.Eval(Container.DataItem, "Nome") %></td>
   <td>
   <%# DataBinder.Eval(Container.DataItem, "Endereco") %></td>
   </tr>
</AlternatingItemTemplate>

</asp:Repeater>
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

No evento Page_Load eu estou definindo a conexão , a string SQL , os objetos DataAdapter , DataSet e estou configurando o controle Repeater através das linhas de código :

Clientes.DataSource = oDataSet.Tables("clientes").DefaultView
Clientes.DataBind()

No código HTML eu estou definindo o controle Repeater  na tag : <asp:Repeater id="clientes" runat="server">

Depois eu defino os templates :

Ao executar o cliente.aspx em seu navegador no servidor IIS teremos a seguinte página:

Nota : você pode copiar o código e colar no editor do WebMatrix  e executar usando o servidor WebMatrix default. Foi isto que eu fiz para testar o script clientes.aspx. ( Para saber como usar o WebMatrix leia os artigos - Inserindo dados em um banco de dados Access e Validação de formulário : CEP , Email e CPF)

Até o próximo artigo ASP.NET.


José Carlos Macoratti