VB.NET - Formatando o DatGrid (WinForms)


 

Se você procurar por artigos relacionados com o DataGrid vai encontrar poucos se referindo ao controle DataGrid sendo utilizado em formulários Windows. Há uma quantidade enormes de artigos sobre DataGrid com WebForms. Indo contra a corrente neste artigo irei mostrar algumas formas úteis de formatar o datagrid para exibir dados.

 

Vou exibir os dados de uma base de dados Access chamada catalogo.mdb ; mais precisamente os dados da tabela produtos que possui a seguinte estrutura:

 

 

Os passos efetuados são os seguintes:

O código que faz tudo isto é o seguinte :

 

Imports System.Data.oledb

Public Class Form1
Inherits System.Windows.Forms.Form

Dim conn As OleDbConnection
Dim da As OleDbDataAdapter
Dim produtos As DataTable
Dim strSql As String

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim tableStyle As New DataGridTableStyle
Dim column As New DataGridTextBoxColumn

strSql = "SELECT * FROM Produtos ORDER BY ID ASC;"

'define a string de conexao com a base de dados
conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\teste\catalogo.mdb")

' Criar o comando
da = New OleDbDataAdapter(strSql, conn)

' preencher o DataTable
produtos = New DataTable
da.Fill(produtos)

'mapear a tabela produtos
tableStyle.MappingName = produtos.TableName.ToString

'definir o titulo , largura de cada coluna e o respectivo campo vinculado
column.MappingName = "Nome"
column.HeaderText = "Nome"
column.Width = 150
tableStyle.GridColumnStyles.Add(column)

column = New DataGridTextBoxColumn
column.MappingName = "Link"
column.HeaderText = "Link"
column.Width = 200
tableStyle.GridColumnStyles.Add(column)

column = New DataGridTextBoxColumn
column.MappingName = "Comentario"
column.HeaderText = "Detalhes"
column.Width = 200
tableStyle.GridColumnStyles.Add(column)

'exibir os dados da tabela no datagrid
DataGrid1.TableStyles.Add(tableStyle)
DataGrid1.DataSource = produtos

End Sub
End Class
 

 

Executando o projeto teremos o resultado abaixo

 

 

Para selecionar uma linha inteira do DataGrid quando o usuário clicar em uma linha basta acrescentar o seguinte código

 

 Private Sub dataGrid1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp

Dim pt = New Point(e.X, e.Y)
Dim hti As DataGrid.HitTestInfo = DataGrid1.HitTest(pt)

If hti.Type = DataGrid.HitTestType.Cell Then
    DataGrid1.CurrentCell = New DataGridCell(hti.Row, hti.Column)
    DataGrid1.Select(hti.Row)
End If
End Sub

 

Para exibir o valor da célula onde o usuário clicar basta acrescentar a seguinte linha de código na rotina DataGrid1_MouseUp acima:

 

Label1.Text = DataGrid1(hti.Row, hti.Column)

 

A  linha de código acima irá exibir o conteúdo da célula clicada em um controle Label .

 

Para exibir o número de linhas selecionados podemos usar o seguinte código :

 

Public Function LinhasSelecionadas(ByVal dg As DataGrid) As System.Collections.ArrayList

Dim al As New ArrayList

Dim cm As CurrencyManager = Me.BindingContext(dg.DataSource, dg.DataMember)
Dim dv As DataView = CType(cm.List, DataView)
Dim i As Integer

For i = 0 To dv.Count - 1

   If dg.IsSelected(i) Then
      al.Add(i)
   End If
Next

Return al

End Function

 

O código acima irá retornar um ArrayList com o número de linhas selecionadas. Para obter o valor basta incluir o código abaixo em um botão de comando:]

 

 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim s As String = "Linhas Selecionadas : "

Dim o As Object

For Each o In LinhasSelecionadas(DataGrid1)
    s += " " + o.ToString()
Next o

MessageBox.Show(s)

End Sub

 

 

Até breve , e bons códigos .net para você...

 


José Carlos Macoratti