ASP.NET 2.0 - Navegando pelos registros um a um


Você já sabe que pode facilmente exibir os registros em um controle como o GridView de forma simples e rápida usando os novos recursos da plataforma .NET, mas como fazer se você quiser exibir os registros um de cada vez permitindo a navegação pelos mesmos ?

O exemplo mostrado neste artigo usa o Visual Web Developer 2005 - VWD (lembre-se ele é grátis) e uma base de dados Access, o velho Northwind.mdb (conheçe ?)

Pois bem vamos selecionar os registros da tabela Customers do Northwind.mdb exibi-los em um DataGrid só que de uma forma diferente: os registros serão exibidos um a um, e, botões de comando na página permitirão a navegação pelos registros.

Abra o VWD e no menu File Selecione a opção New Web Site. Dê um nome ao projeto e salve-o em um pasta do seu computador. Eu dei ao projeto o nome aspnetNavegacao.

A seguir selecione a página default.aspx e no modo Design inclua um controle DataGrid e 4 botões de comando conforme indica a figura abaixo:

Mude para o modo Source para exibir o código da página default.aspx e você verá:

<!-- DataGrid-->

<p align="center">

<asp:DataGrid id="DataGrid1" AllowPaging="True" PageSize="<%# intTamanhoPagina %>"

PagerStyle-Visible="False" runat="server" BorderColor="Tan" BorderWidth="1px" BackColor="LightGoldenrodYellow"

CellPadding="2" GridLines="None"

Font-Names="Verdana" Font-Size="10pt" Width="50%" ItemStyle-Width="25%" ForeColor="Black">

<SelectedItemStyle ForeColor="GhostWhite" BackColor="DarkSlateBlue"></SelectedItemStyle>

<AlternatingItemStyle BackColor="PaleGoldenrod"></AlternatingItemStyle>

<ItemStyle Width="25%"></ItemStyle>

<HeaderStyle Font-Bold="True" BackColor="Tan"></HeaderStyle>

<FooterStyle BackColor="Tan"></FooterStyle>

<PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center"

Visible="False" />

</asp:DataGrid>

<br>
<!-- botoes de comando-->

<asp:Button id="btnPrimeiro" Text="Primeiro" CommandName="Primeiro" runat="server" onClick="paginaClickBotao" />

<asp:Button id="btnAnterior" Text="Anterior" CommandName="Anterior" runat="server" onClick="paginaClickBotao" />

<asp:Button id="btnProximo" Text="Próximo" CommandName="Proximo" runat="server" onClick="paginaClickBotao" />

<asp:Button id="btnUltimo" Text="Último" CommandName="Ultimo" runat="server" onClick="paginaClickBotao" />

<br>

Vale a pena destacar neste código o seguinte:

1- Em PageSize esta a variável intTamanhoPagina que define quantos registros serão exibidos na página

2- Os botões de comando tem os seus eventos clicks vinculados ao mesmo evento paginaClickBotao

Selecione o arquivo Default.aspx.vb e insira o seguinte código neste arquivo:

Imports System.data

Imports System.data.OleDb
 

Partial Class _Default

      Inherits System.Web.UI.Page
 

Dim cn As OleDbConnection

Dim da As OleDbDataAdapter

Dim ds As DataSet

Dim strConn As String

Protected intTamanhoPagina As Integer


Protected
Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
form1.Load


 strConn =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb"


 cn =
New OleDbConnection(strConn)

 da = New OleDbDataAdapter("Select * FROM Customers", cn)

 ds = New DataSet()

 da.Fill(ds, "Table")


 
'Os dados são exibidos como

 'Coluna1 -> ColumnNames

 'Coluna2 -> Column Data

 'Dai a varivael intPageSize é definido para o numero de colunas

 'a exibir na pagina


 intTamanhoPagina = ds.Tables(0).Columns.Count


 
'montaColunasNaVertical(ds)-> Function: Exibe que cria uma visão vertical dos registros

 DataGrid1.DataSource = montaColunasNaVertical(ds)

 If Not Page.IsPostBack Then

      DataGrid1.DataBind()

End If

End Sub
 

Public Function montaColunasNaVertical(ByVal ds As DataSet) As DataSet


Dim
NovoDs As DataSet = New
DataSet()

NovoDs.Tables.Add()


'Cria duas colunas com o nomes : "Nome" e "Valor"

'Nome -> Exibe todas as colunas (ColumnNames)

'Valor -> Exibe os dados da coluna (ColumnData)

NovoDs.Tables(0).Columns.Add("Nome")

NovoDs.Tables(0).Columns.Add("Valor")


Dim
dr As
DataRow


For
Each dr In
ds.Tables(0).Rows

 Dim dcol As System.Data.DataColumn


   For
Each dcol In
ds.Tables(0).Columns

   'Declara um Array

   Dim mArray() As String = {dcol.ColumnName.ToString(), dr(dcol.ColumnName.ToString()).ToString()}

   NovoDs.Tables(0).Rows.Add(mArray)

  Next

Next

Return NovoDs

End Function
 

Protected Sub paginaClickBotao(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrimeiro.Click, btnAnterior.Click, btnProximo.Click, btnUltimo.Click


Dim
nomeBotaoComando As String = CType
(sender, Button).CommandName


Select
Case
nomeBotaoComando.ToUpper

Case "PRIMEIRO"

   DataGrid1.CurrentPageIndex = 0

Case "ANTERIOR"

   DataGrid1.CurrentPageIndex = Math.Max(DataGrid1.CurrentPageIndex - 1, 0)

Case "PROXIMO"

   DataGrid1.CurrentPageIndex = Math.Min(DataGrid1.CurrentPageIndex + 1, DataGrid1.PageCount - 1)

Case "ULTIMO"

   DataGrid1.CurrentPageIndex = DataGrid1.PageCount - 1

Case Else

End Select

DataGrid1.DataBind()

End Sub

End Class

Neste código temos :

2- A função montaColunaNaVertical - que retorna um DataSet do registro individual para a propriedade DataSource do DataGrid

3- A rotina paginaClickBotao - que é acionada quando o evento Click de qualquer botão é disparado e define o índice da página do DataGrid que deve ser exibida.

Ao executar a página no servidor do VWD a página da figura abaixo é exibida. O usuário pode então navegar pelos registros clicando nos botões de comando.

Pegue o código do projeto aqui: aspnetNavegacao.zip

Bom estudo e até o próximo artigo ASP.NET...


José Carlos Macoratti