C# - Paginando dados no DataGridView - I |
Neste artigo vou mostrar como preencher um controle DataGridView com dados do SQL Server e como realizar a paginação neste componente usando a linguagem C# em um projeto Windows Forms. |
Eu já perdi a conta do número de artigos que escrevi sobre o controle DataGridView. A maior parte deles foi usando a linguagem VB .NET e hoje vou tratar do assunto usando a linguagem C#.
O controle DataGridView controle
e suas classes relacionadas permite exibir e editar dados no formato tabular de
uma forma simples e rápida.
No DataGridView a célula é a unidade fundamental de interação sendo que todas as
células derivam da classe base DataGridViewCell. Cada célula no
DataGridView pode ter o seu próprio estilo, como formato de texto, cor de fundo,
cor de primeiro plano e fonte. Se o DataGridView tiver muitas linhas podemos
implementar funcionalidades de paginação. Para implementar a paginação
devemos saber os limites das páginas.
Neste artigo eu mostro uma das maneiras de realizar a paginação no DataGridView
que irá acessar e exibir dados de um banco de dados SQL Server.
Vou implementar uma pequena camada de acesso a dados usando uma classe para isso devido a simplicidade do projeto. Dessa forma vou evitar de colocar o código de acesso a dados no formulário o que é uma boa prática.
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando o projeto no VS Community
Abra o VS Community e clique em New Project;
Selecione a linguagem C# e o template Windows Forms Application;
Informe o nome da solução como DatagridView_Paginacao e clique no botão OK;
Vamos acessar a tabela Customers do banco de dados Northwind.mdf e vamos definir a string de conexão no arquivo App.Config:
... <connectionStrings> <add name="conexaoNorthwind" connectionString="Data Source=.\sqlexpress;Initial Catalog=Northwind;Integrated Security=True" providerName="System.Data.SqlClient"/> </connectionStrings> ... |
Temos que incluir uma referência em nosso projeto ao namespace System.Configuration.
No menu Project clique em Add Reference, clique na opção Assemblies e marque o namespace System.Configuration.
A seguir inclua os seguintes controles no formulário form1.cs :
DataGridView - dgvDados
3 Buttons - btnCarregar, btnProximo, btnAnterior
Disponha os controles conforme o leiaute da figura abaixo:
Defina os seguintes namespaces no formulário form1.cs:
using
System;using
System.Configuration;using
System.Data;using
System.Data.SqlClient;using
System.Windows.Forms;Após a declaração do formulário vamos definir as variáveis a seguir que iremos usar no projeto:
SqlDataAdapter pagingAdapter;DataSet paginaDS;
int Deslocamento;
int tamanhoPagina = 10;
int TotalRegistros;
gora vamos implementar o código no formulário usando os eventos Click dos botões
Evento Click do botão Carregar Dados:
private void btnCarregar_Click(object sender, EventArgs e) { try { string conString = ConfigurationManager.ConnectionStrings["conexaoNorthwind"].ConnectionString; string sql = "SELECT CustomerId, CompanyName, ContactName, City, Country FROM Customers"; TotalRegistros = AcessoBD.SelectScalar("Select Count(*) from Customers"); SqlConnection connection = new SqlConnection(conString); pagingAdapter = new SqlDataAdapter(sql, connection); paginaDS = new DataSet(); connection.Open(); pagingAdapter.Fill(paginaDS, Deslocamento, tamanhoPagina, "Customers"); connection.Close(); dgvDados.DataSource = paginaDS; dgvDados.DataMember = "Customers"; } catch(Exception ex) { MessageBox.Show("Erro :" + ex.Message); } } |
Private Sub btnCarregar_Click(sender As Object, e As EventArgs) Try Dim conString As String = ConfigurationManager.ConnectionStrings("conexaoNorthwind").ConnectionString Dim sql As String = "SELECT CustomerId, CompanyName, ContactName, City, Country FROM Customers" TotalRegistros = AcessoBD.SelectScalar("Select Count(*) from Customers") Dim connection As New SqlConnection(conString) pagingAdapter = New SqlDataAdapter(sql, connection) paginaDS = New DataSet() connection.Open() pagingAdapter.Fill(paginaDS, Deslocamento, tamanhoPagina, "Customers") connection.Close() dgvDados.DataSource = paginaDS dgvDados.DataMember = "Customers" Catch ex As Exception MessageBox.Show("Erro :" + ex.Message) End Try End Sub
|
C# | VB .NET |
Observe que eu estou obtendo o total de registros da tabela usando o método AcessoBD.SelectScalar() esse método estático foi definido em na classe AcessoBD() que tem o seguinte código:
public static int SelectScalar(string sql) { using (SqlConnection connection = GetDbConnection()) { using (SqlCommand command = new SqlCommand(sql, connection)) { return Convert.ToInt32(command.ExecuteScalar()); } } } |
Public Shared Function SelectScalar(ByVal sql As String) As String Using connection As SqlConnection = GetDbConnection() Using command As New SqlCommand(sql, connection) Return CStr(command.ExecuteScalar) End Using End Using End Function |
C# | VB .NET |
Para paginar vamos usar os botões de comando:
1- Próximo
private void btnProximo_Click(object sender, EventArgs e) { Deslocamento = Deslocamento + tamanhoPagina; if (Deslocamento > TotalRegistros) { Deslocamento = Deslocamento- TotalRegistros; } paginaDS.Clear(); pagingAdapter.Fill(paginaDS, Deslocamento, tamanhoPagina, "Customers"); }
|
Private Sub btnProximo_Click(sender As Object, e As EventArgs) Deslocamento = Deslocamento + tamanhoPagina If Deslocamento > TotalRegistros Then Deslocamento = Deslocamento - TotalRegistros End If paginaDS.Clear() pagingAdapter.Fill(paginaDS, Deslocamento, tamanhoPagina, "Customers") End Sub
|
2- Anterior
private void btnAnterior_Click(object sender, EventArgs e) { Deslocamento = Deslocamento - tamanhoPagina; if (Deslocamento <= 0) { Deslocamento = 0; } paginaDS.Clear(); pagingAdapter.Fill(paginaDS, Deslocamento, tamanhoPagina, "Customers"); }
|
Private Sub btnAnterior_Click(sender As Object, e As EventArgs) Deslocamento = Deslocamento - tamanhoPagina If Deslocamento <= 0 Then Deslocamento = 0 End If paginaDS.Clear() pagingAdapter.Fill(paginaDS, Deslocamento, tamanhoPagina, "Customers") End Sub
|
Executando o projeto iremos obter:
Este exemplo mistura código de acesso a dados na camada de apresentação e isso não é uma boa prática. O mais correto seria criar uma classe para fazer o acesso a dados e separar as responsabilidades.
Na segunda parte vou mostrar outra maneira de realizar a paginação no DataGridView.
Pegue o projeto completo aqui : DatagridView_Paginacao.zip
E Jesus, tendo ouvido isto, disse-lhes:
Os sãos não necessitam de médico, mas, sim, os que estão doentes; eu não vim
chamar os justos, mas, sim, os pecadores ao arrependimento.
Marcos 2:17
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 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: