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:
Criar uma conexão usando o objeto OleDbConnection
Criar um objeto DataAdapter
Criar um objeto Datatable e preencher este objeto com os dados da minha tabela produtos
Preencher a tabela com os dados
Configurar o DataGrid : nome titulo das colunas, largura das colunas , campos vinculados a cada coluna
Preencher o datagrid
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