VB.NET - Formatando o DataGrid II


Este artigo aplica-se a versão 2003 do Visual Studio e tem como objetivo mostrar como você pode formatar o controle DataGrid via código, ele é uma extensão do meu artigo - Formatando o DataGrid.

O controle DataGrid é muito usado para exibir dados na forma tabular , linhas e colunas, e , geralmente os dados vem de uma tabela de uma fonte de dados.

Existem muitas formas de efetuar a exibição dos dados em um DataGrid; a seguir , para você lembrar, damos um exemplo de como fazer isto em VB.Net e C#.

Inicie um novo projeto do tipo Windows Application e inclua um componente DataGrid no formulário padrão:

Você já deve saber que podemos exibir dados de qualquer fonte de dados: MsAccess, SQL Server, Oracle, XML , Texto, Excel , etc.

Neste artigo vou exibir os dados da tabela Categories do banco de dados MsAccess Northwind.mdb usando um provedor OleBd.

Por isto terei que usar o import do namespace System.Data.OleDb

Imports System.Data.oledb

 

As etapas básicas que vou usar para exibir os dados da tabela Categories são:

  1. Criar um objeto DataAdpater usando a instrução SQL para selecionar todos os dados da tabela Categories usando o provedor OleDb
  2. Criar um objeto DataSet
  3. Preencher o objeto DataSet via DataAdapter
  4. Vincular os dados ao DataGrid

No início do formulário vamos definir as variáveis usadas no projeto:

Dim ds As New DataSet

No evento Load do formulário inclua o seguinte código que irá chamar a rotina preencherGrid()

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    preencherGrid()
End
Sub

private void Form1_Load(object sender, System.EventArgs e)
{
   preencherGrid()
}

O código da rotina preencherGrid é dado a seguir:

1- Código VB.NET

Private Sub preencherGrid()

Dim da As New OleDbDataAdapter("SELECT * FROM Categories", "Provider=Microsoft.JET.OLEDB.4.0;data source=d:\teste\northwind.mdb")

da.Fill(ds, "Categories")

DataGrid1.DataSource = ds.Tables("Categories").DefaultView

End Sub

2- Código C#

private void preencherGrid()
{
  OleDbDataAdapter da = new OleDbDataAdapter ("SELECT * FROM Categories", "Provider=Microsoft.JET.OLEDB.4.0;data   source=d:\teste\northwind.mdb" );
  da.Fill(ds, "Student");
  dataGrid1.DataSource = ds.Tables["Student"].DefaultView ;
}

O resultado final após executar o projeto será :

Legal , não é mesmo ??? Mas você há de convir que a aparência não é lá essa maravilha...

Que tal dar uma ajeitada na aparência formatando o DataGrid (usar o assistente de formatação não vale...) via código ?

Uma das primeiras coisas a fazer é incluir na declaração de variáveis as linhas de código abaixo:

Dim dgCategoriaEstilo As New DataGridTableStyle
'guarda o estilo padrão

Dim EstiloBordaDoGrid As BorderStyle

1- Usando a classe DataGridTableStyle

A classe DataGridTableStyle é uma classe que representa o controle DataGrid desenhado, e, por meio desta classe podemos controlar o formato de visualização do controle. Para alterar o formato do controle devemos criar uma nova instância desta classe e alterar suas propriedades e a seguir incluir o estilo na coleção GridTableStylesCollection.

Vamos incluir um novo botão de comando alterando o seu texto para : Alterar Estilo Grid e seu nome para btnAlteraEstiloGrid.

No evento Click deste botão inclua o código abaixo:

Private Sub btnAlteraEstiloGrid_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlteraEstiloGrid.Click


resetaEstiloGrid()

preenchergrid()


With
dgCategoriaEstilo

  .AlternatingBackColor = Color.Cyan

  .BackColor = Color.Gold

  .ForeColor = Color.Blue

  .GridLineColor = Color.Brown

  .HeaderBackColor = Color.Cyan

  .HeaderForeColor = Color.Crimson

  .SelectionBackColor = Color.DarkCyan

  .SelectionForeColor = Color.DarkBlue

  .MappingName = "Categories"

  .PreferredColumnWidth = 130

  .PreferredRowHeight = 18

End With
 

dgCategories.TableStyles.Add(dgCategoriaEstilo)

End Sub

2- Usando a classe DataGridColumnStyle

Esta classe determina o visual do formato do texto e a forma de comportamento das colunas do datagrid. Para usá-la basta criar uma instância da classe DataGridTextBoxColumn,  que é herdada da classe DataGridColumnStyle, e, alterar suas propriedades e incluir o estilo das colunas na

Vamos incluir um novo botão de comando no formulário e alterar seu texto para : Alterar Estilo Colunas e seu nome para btnAlteraEstiloColuna.

No evento Click do botão inclua o código abaixo:

Private Sub btnAlteraEstiloColuna_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlteraEstiloColuna.Click


resetaEstiloGrid()

preenchergrid()


'define uma nova formatação para o grid

With dgCategories()

  .CaptionText = "Categorias Registradas"

  .CaptionBackColor = Color.RoyalBlue

  .CaptionFont = New Font("Tahoma", 10.0!, FontStyle.Bold)

  .CaptionForeColor = Color.Bisque

  .BackColor = Color.GhostWhite

  .BackgroundColor = Color.Lavender

  .BorderStyle = BorderStyle.None

  .Font = New Font("Tahoma", 8.0!)

  .ParentRowsBackColor = Color.Lavender

  .ParentRowsForeColor = Color.MidnightBlue

End With
 

'define um novo objeto para definir os novos estilos das colunas

Dim dgEstiloColuna As New DataGridTableStyle


With
dgEstiloColuna

  .AlternatingBackColor = Color.GhostWhite

  .BackColor = Color.GhostWhite

  .ForeColor = Color.MidnightBlue

  .GridLineColor = Color.RoyalBlue

  .HeaderBackColor = Color.MidnightBlue

  .HeaderFont = New Font("Tahoma", 8.0!, FontStyle.Bold)

  .HeaderForeColor = Color.Lavender

  .SelectionBackColor = Color.Teal

  .SelectionForeColor = Color.PaleGreen

    'mapea a tabela que irá receber os estilos

  .MappingName = "Categories"

  .PreferredColumnWidth = 125

  .PreferredRowHeight = 15

End With


Dim
colEstiloCategoria1 As New
DataGridTextBoxColumn

With colEstiloCategoria1

  'coluna CategoryID

  .HeaderText = "Codigo"

  .MappingName = "CategoryID"

  .Width = 80

  .ReadOnly = True

End With


Dim
colEstiloCategoria2 As New
DataGridTextBoxColumn

With colEstiloCategoria2

   'coluna CategoryName

  .HeaderText = "Nome Categoria"

  .MappingName = "CategoryName"

  .Width = 150

End With


Dim
colEstiloCategoria3 As New
DataGridTextBoxColumn

With colEstiloCategoria3

  'coluna Description

  .HeaderText = "Descrição da Categoria"

  .MappingName = "Description"

  .Width = 250

End With


' Incluir os estilos ds colunas ao estilo do grid

dgEstiloColuna.GridColumnStyles.AddRange(New DataGridColumnStyle() {colEstiloCategoria1, colEstiloCategoria2, colEstiloCategoria3})

dgCategories.TableStyles.Add(dgEstiloColuna)

End Sub

Em ambos os casos usamos a rotina restaEstiloGrid() que restaura o formato padrão do datagrid usado no projeto. O seu código é dado abaixo:

Private Sub resetaEstiloGrid()


'Exclui a tabela do DataSet

If Not IsNothing(ds.Tables("Categories")) Then

   ds.Tables("Categories").Clear()

End If
 

'Retorna ao estilo padrão do Grid

With dgCategories

  .BackgroundColor = SystemColors.InactiveCaptionText

  .CaptionText = ""

  .CaptionBackColor = SystemColors.ActiveCaption

  .TableStyles.Clear()

  .ResetAlternatingBackColor()

  .ResetBackColor()

  .ResetForeColor()

  .ResetGridLineColor()

  .ResetHeaderBackColor()

  .ResetHeaderFont()

  .ResetHeaderForeColor()

  .ResetSelectionBackColor()

  .ResetSelectionForeColor()

  .ResetText()

  .BorderStyle = EstiloBordaDoGrid

End With

End Sub

Vamos incluir um terceiro botão de comando com o texto - Estilo Padrão e com o nome de btnEstiloPadrao e no seu evento click incluir o código a seguir:

Private Sub btnEstiloPadrao_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEstiloPadrao.Click

   resetaEstiloGrid()

   preenchergrid()

End Sub

 

Executando o projeto teremos como resultado as seguintes possibilidades:

 

 

Conforme a opção do usuário temos a exibição da formatação do estilo do datagrid com opção de retorno ao estilo padrão.

 

Como você pode observar não nada complicado trabalhar com as opções de formatação via código.

 

Pegue o projeto completo aqui: formatDataGrid.zip

 

Até mais ver...
 

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:


José Carlos Macoratti