|
|
![]() |
![]() |
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: