ADO.NET - Paginação de dados
Em meu artigo - ASP.NET - Paginando dados em um DataGrid - tratei de mostrar como efetuar a paginação em um DataGrid em páginas ASP.NET. Vou agora fazer a mesma coisa para formulários Windows.
A paginação em formulários Windows de dados que são exibidos em um DataGrid é possível e é uma tarefa relativamente simples. Isto por que o método Fill do objeto DataAdapter fornece um método sobrecarregado que retorna somente um número selecionado de linhas em um DataSet. O código deste método é exibido a seguir:
Overloads Public Function
Fill(ByVal dataSet As DataSet, _
ByVal startRecord As
Integer, _
ByVal maxRecords As
Integer, _
ByVal srcTable As
String _
) As Integer
Onde :
Nota: Para saber mais sobre sobrecarga e conceitos OO no VB.NET leia o artigo : VB .NET - Primeiros passos - Conceitos - VI
Então para obter a paginação devemos usar este método sobrecarregado. Faremos isto implementando uma função chamada obtemDadosPagina que irá retornar os registros da tabela Products do banco de dados Northwind do SQL Server.
Abaixo temos o código da função:
Function obtemDadosPagina(ByVal
da As SqlDataAdapter, ByVal idx As Integer,
ByVal size As Integer) As DataSet Dim ds As DataSet = New DataSet() Try da.Fill(ds, idx, size, "Products") Catch e As Exception MessageBox.Show(e.Message.ToString()) End Try Return ds End Function |
Crie então um novo projeto no VS.NET do tipo Windows Application usando a linguagem VB.NET e no formulário padrão inclua os seguintes controles :
, conforme o layout da figura abaixo:
Como vamos realizar uma conexão com o banco de dados Northwind do SQL Server vamos precisar do seguinte import:
Imports
System.Data.SqlClientTeremos que definir algumas variáveis da aplicação no início do formulário:
Dim strconn As String = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind"Dim conn As SqlConnection
Dim da As SqlDataAdapter
Dim ds As DataSet
Dim tamanhoPagina As String
Dim indiceAtual As Integer Dim totalregistros As Integer Dim sql As StringDestacamos a string de conexão com o SQL Server.
No evento Load do formulário vamos incluir a rotina que preenche a combobox com algumas valores que poderão ser escolhidos pelo usuário para indicar quantos registros ele deseja que seja exibidos por vez.
Private Sub Form1_Load(ByVal
sender As System.Object,
ByVal e As System.EventArgs)
Handles MyBase.Load
Dim i As Integer 'preenche o combo com valores ate 20 For i = 0 To 20 Step 1cboTamanho.Items.Add(i) Next 'define a opção que sera exibida na combocboTamanho.SelectedIndex = 9 End Sub
|
O código do botão Carregar é que irá fazer todo o serviço , usando a função obtemDadosPagina já definida acima.
Private Sub btnCarregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarregar.Click 'converte o valor para um inteiro tamanhoPagina = Convert.ToInt32(cboTamanho.Text.ToString()) ' Cria e abrea uma conexao conn = New SqlConnection(strconn) conn.Open() ' descobre o numero total de registros Dim cmd As SqlCommand = New SqlCommand ' define o comando SQL para contar os registros da tabela Products cmd.CommandText = "SELECT Count(*) FROM Products" cmd.Connection = conn ' chama ExecuteNonQuery no objeto Command Object para executar o SQL totalregistros = cmd.ExecuteScalar() ' Cria um data adapter e um instrução select para a tabela Products sql = "SELECT ProductID, ProductName, UnitPrice " & "FROM Products ORDER BY ProductID" 'cria um novo DataAdapter para a conexão com a instrução SQL da = New SqlDataAdapter(sql, conn) ds = New DataSet 'chama a função que retorna o número de registro definidos pelo usuário por vez ds = obtemDadosPagina(da, indiceAtual, tamanhoPagina) indiceAtual = indiceAtual + tamanhoPagina dgPaginacao.DataSource = ds.Tables(0) End Sub |
A seguir o código dos botões que permitem a navegação para frente a para trás efetuando a paginação de dados
Private Sub btnProximo_Click(ByVal
sender As System.Object,
ByVal e As System.EventArgs)
Handles btnProximo.Click
ds = obtemDadosPagina(da, indiceAtual, tamanhoPagina) indiceAtual = indiceAtual + tamanhoPagina dgPaginacao.DataSource = ds.Tables(0) End Sub |
Botão Próximo |
Private Sub btnAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnterior.Clickds = obtemDadosPagina(da, indiceAtual, tamanhoPagina) indiceAtual = indiceAtual - tamanhoPagina dgPaginacao.DataSource = ds.Tables(0) End Sub |
Botão Anterior |
Creio que agora somente resta executar o projeto e obter a paginação. Abaixo uma tela exibindo a sequência da página para 9 registros por página:
Eu sei , é apenas VB.NET , mas eu gosto ....
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: