C# - Paginando e Imprimindo o DataGridView (via DataSet) |
Neste artigo vou mostrar como podemos realizar a paginação em um controle DataGridView usando um Dataset e a linguagem C#. |
O controle DataGridView é muito versátil e perfeito para exibir dados no formato tabular. Ocorre que quando a quantidade de dados for muito grande não é muito aconselhável exibir todos os registros de uma vez no controle pois isso pode impactar de forma negativa o desempenho da sua aplicação.
Uma solução é realizar a paginação de dados carregando apenas uma parte dos dados por vez conforme eles forem solicitados.
Uma maneira de fazer isso é através da criação de um DataSet via método Fill do objeto DataAdapter que 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 :
Como exemplo vou acessar a tabela Products do banco de de dados Northwind.mdf do SQL Server para obter os dados e realizar a paginação. (Também vou implementar a impressão do DataGridView)
Recursos usados :
Criando o projeto no VS 2015
Abra o VS Community 2015 e clique em New Project;
A seguir selecione Visual C# -> Windows -> Windows Forms Application;
Informe o nome DataGridView_Paginacao e clique no botão OK;
A partir da ToolBox inclua os seguintes controles no formulário form1.vb:
1 Label - Definir Quantidade de registros a Paginar
1 TextBox - txtQuantidadeRegistros
1 Button - btnImprimir
1 DataGridView - dgvDados
3 Buttons - btnProximo, btnCarregarDados, btnAnterior
1 printDocument - printDocument
Abaixo leiaute do formulário:
Vamos definir os namespaces usados no projeto:
using
System;A seguir vamos definir as variáveis que serão usadas em todo o formulário:
SqlDataAdapter daPaginacao;
DataSet dsPaginado;
DataTable dt;
int regInicio;
int registros;
int quantidadeRegistrosPaginar;
Agora em cada evento Click de cada um dos botões de comando vamos definir o respectivo código:
1 - Carregar Dados no DataGridView
No evento Click do botão de comando - Carregar dados do SQL Server - inclua o código abaixo:
private void btnCarregarDados_Click(object sender, EventArgs e) { try { quantidadeRegistrosPaginar = Convert.ToInt32(txtQuantidadeRegistros.Text); string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True";
string sql = "SELECT * FROM Products";
SqlConnection connection = new SqlConnection(connectionString);
daPaginacao = new SqlDataAdapter(sql, connection);
dsPaginado = new DataSet();
dt = new DataTable();
connection.Open();
daPaginacao.Fill(dt);
registros = dt.Rows.Count;
daPaginacao.Fill(dsPaginado, regInicio, quantidadeRegistrosPaginar, "Products");
connection.Close();
dgvDados.DataSource = dsPaginado;
dgvDados.DataMember = "Products";
}
catch(Exception ex)
{
MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
Neste código temos o seguinte :
- obtemos a quantidade de registros a paginar do controle TextBox - txtQuantidadeRegistros,
- definimos a string de conexão para acessar o banco de dados Northwind do SQL Server
- Definimos a string SQL para acessar e retornar todos os registros da tabela Products :
- Criamos a conexão
- Criamos o objeto DataAdapter
- Criamos os objetos DataSet e DataTable
- Preenchemos o DataTable e retornamos a quantidade total de registro da tabela
- Criamos o dataset paginado
- fechamos a conexão
- e atribuímos o dataset ao controle DatagridView na sua propriedade DataSource
2 - Paginar para frente
No evento Click do botão de comando btnProximo temos o seguinte código :
private void btnProximo_Click(object sender, EventArgs e)
{
regInicio = regInicio + quantidadeRegistrosPaginar;
if (regInicio >= registros)
{
regInicio = registros - quantidadeRegistrosPaginar;
}
dsPaginado.Clear();
//da.Fill(dataset, no. registro de inicio, qtde de registros a retornar, nome da tabela)
daPaginacao.Fill(dsPaginado, regInicio, quantidadeRegistrosPaginar, "Products");
}
|
3 - Paginar para trás (ou de volta)
No evento Click do botão de comando btnAnterior temos o seguinte código :
private void btnAnterior_Click(object sender, EventArgs e)
{
regInicio = regInicio - quantidadeRegistrosPaginar;
if (regInicio <= 0)
{
regInicio = 0;
}
dsPaginado.Clear();
//da.Fill(dataset, no. registro de inicio, qtde de registros a retornar, nome da tabela)
daPaginacao.Fill(dsPaginado, regInicio, quantidadeRegistrosPaginar, "Products");
}
|
4 - Imprimir o DataGridVIew
No evento Click do botão de comando btnImprimir inclua o código abaixo:
private void btnImprimir_Click(object sender, EventArgs e) |
A seguir defina o seguinte código no evento PrintPage do objeto printDocument:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs
e)
|
Serão impressos somente os dados atuais que estão sendo exibidos pelo DataGridView no formulário.
Ao executar o projeto basta definir a quantidade de registros a paginar, carregar os dados e realizar a paginação:
Pegue o projeto completo aqui : DataGridView_Paginacao.zip
E
esta é a mensagem que dele (Jesus) ouvimos, e vos anunciamos: que Deus é luz, e
não há nele trevas nenhumas.
Se dissermos que temos comunhão com ele, e andarmos em trevas, mentimos, e não
praticamos a verdade.
1 João 1:5,6
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 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
ASP.NET - Paginação com DataGrid via código. - Macoratti ...