Desenvolvimento - Visual Basic .NET

Atribuição de Coleção de Objetos e Estilo em DataGrids utilizando WinForms

Quando trabalhamos com aplicações baseadas em camadas(NTyers), é natural manipularmos coleções de objetos e que podem ser aplicadas em controles como DataGrids, um dos mais utilizados e comuns controles para WinForms (e até para WebForms).

por André Luis Calderan



Quando trabalhamos com aplicações baseadas em camadas(NTyers), é natural manipularmos coleções de objetos e que podem ser aplicadas em controles como DataGrids, um dos mais utilizados e comuns controles para WinForms (e até para WebForms).

O DataGrid pode receber “massa” de dados tanto provenientes de DataReaders e Adapters, diretamente de SGBD’s, bem como de arquivos XML, no entanto podemos passar para um DataGrid um objeto do tipo ArrayList e até mesmo um vetor de quantidade N de objetos complexos e uniformes.

Vamos começar, crie um novo projeto e um novo form, chamarei de exemplo.vb e atribua um controle DataGrid (obj DataGrid1).

No fonte, crie uma classe “usuário” onde nosso datagrid receberá uma coleção desses obj’s(Tipo usuário),veja a classe :

Public Class usuario 
	Private strNome As String 
	Private strRegistro As String 
	Private intIdade As Integer 
	
	Property nome() As String 
		Get 
			Return strNome 
		End Get 
		Set(ByVal Value As String) 
			strNome = Value 
		End Set 
	End Property 

	Property registro() As String 
		Get 
			Return strRegistro 
		End Get 
		Set(ByVal Value As String) 
			strRegistro = Value 
		End Set 
	End Property 

	Property idade() As Integer 
		Get 
			Return intIdade 
		End Get 
		Set(ByVal Value As Integer) 
			intIdade = Value 
		End Set 
	End Property 
End Class 

Nada anormal, uma classe básica. Agora vamos criar um procedimento para preencher os “usuário”s em nosso controle.

Private Sub preencheGrid() 
	Dim usuarios(3) As usuario 
	Dim aux As usuario 

	"Inclusão do primeiro usuário 
	aux = New usuario() 
	aux.nome = "Daniele" 
	aux.idade = 20 
	aux.registro = "ABC123" 
	usuarios(0) = aux 

	"Inclusão do segundo usuário 
	aux = New usuario() 
	aux.nome = "Leticia" 
	aux.idade = 21 
	aux.registro = "ABC456" 
	usuarios(1) = aux 

	"Inclusão do terceiro usuário 
	aux = New usuario() 
	aux.nome = "Roberta" 
	aux.idade = 22 
	aux.registro = "ABC789" 
	usuarios(2) = aux 
	
	DataGrid1.SetDataBinding(usuarios, "") 
End Sub 

Note acima que estou realizando a vinculação / preenchimento da coleção de usuários com nosso datagrid utilizando o método setDataBinding.

Vamos então criar um método que atribua os estilos ao datagrid, mas deveremos fazer na mão mesmo, a invés de utilizar os “wizards” do VS.NET. Nesse processo deve-se ter em mente a seguinte conceito:

Uma instância de DataGridTableStyle é associada a um controle DataGrid, que contém outras instâncias do tipo DataGridTextBoxColumn/DataGridBoolColumn.

Veja o método atribuicaoDoEstilo para associar uma instância de DataGridTableStyle a nosso controle.

Private Sub atribuicaoDoEstilo() 

	" Primeiro passo é a criação do obj tipo DataGridTableStyle, 
	"a "interface" entre o DataGrid e a aparência que irá moldar. 
	Dim tbEstilo As New DataGridTableStyle() 
	
	" Atribua o mapeamento da tabela, como nossa DataGrid, 
	"só estará recebendo informações do tipo "usuario", 
	"essa será a atribuição, sussedida por "[]" para indicação da classe. 
	tbEstilo.MappingName = "usuario[]" 
	
	" Vamos configurar uma alternancia de cor por linha 
	tbEstilo.AlternatingBackColor = System.Drawing.Color.AntiqueWhite 
	
	" Agora vamos a edição das Colunas 
	Dim colNome As New DataGridTextBoxColumn() 
	
	"a atribuição do MappingName é referente a propriedade da classe 
	colNome.MappingName = "nome" 
	colNome.HeaderText = "Nome da Pessoa" 
	colNome.Width = "200" 
	
	Dim colIdade As New DataGridTextBoxColumn() 
	colIdade.MappingName = "idade" 
	colIdade.HeaderText = "Idade" 
	colIdade.Width = "40" 
	
	Dim colRegistro As New DataGridTextBoxColumn() 
	colRegistro.MappingName = "registro" 
	colRegistro.HeaderText = "Registro do Usuário" 
	colRegistro.Width = "120" 
	
	" Agora adicionamos as colunas ao obj table style. 
	With tbEstilo.GridColumnStyles 
		.Add(colNome) 
		.Add(colIdade) 
		.Add(colRegistro) 
	End With 
	
	" Adicione a table style ao grid, mas limpe a coleção primeiro 
	DataGrid1.TableStyles.Clear() 
	DataGrid1.TableStyles.Add(tbEstilo) 

End Sub 

Agora, o método principal de nosso WinForm(load), executando os dois procedimentos escritos.

Private Sub exemplo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
	preencheGrid() 
	atribuicaoDoEstilo() 
End Sub 

Compile e veja o resultado:

Referências :
http://msdn.microsoft.com

Para possível ajuda, fonte do winform utilizado no artigo:

Public Class exemplo 
	Inherits System.Windows.Forms.Form 

#Region " Windows Form Designer generated code " 

	Public Sub New() 
		MyBase.New() 

		"This call is required by the Windows Form Designer. 
		InitializeComponent() 

		"Add any initialization after the InitializeComponent() call 
	
	End Sub 

	"Form overrides dispose to clean up the component list. 
	Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) 
		If disposing Then 
			If Not (components Is Nothing) Then 
				components.Dispose() 
			End If 
		End If 
		MyBase.Dispose(disposing) 
	End Sub 

	"Required by the Windows Form Designer 
	Private components As System.ComponentModel.IContainer 

	"NOTE: The following procedure is required by the Windows Form Designer 
	"It can be modified using the Windows Form Designer. 
	"Do not modify it using the code editor. 
	Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid 
	<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() 
		Me.DataGrid1 = New System.Windows.Forms.DataGrid() 
		CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).BeginInit() 
		Me.SuspendLayout() 
		" 
		"DataGrid1 
		" 
		Me.DataGrid1.DataMember = "" 
		Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText 
		Me.DataGrid1.Location = New System.Drawing.Point(24, 16) 
		Me.DataGrid1.Name = "DataGrid1" 
		Me.DataGrid1.Size = New System.Drawing.Size(448, 136) 
		Me.DataGrid1.TabIndex = 0 
		" 
		"exemplo 
		" 
		Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) 
		Me.ClientSize = New System.Drawing.Size(592, 173) 
		Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.DataGrid1}) 
		Me.Name = "exemplo" 
		Me.Text = "exemplo" 
		CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit() 
		Me.ResumeLayout(False) 

	End Sub 

#End Region 

	Private Sub exemplo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
MyBase.Load 
		preencheGrid() 
		atribuicaoDoEstilo() 
	End Sub 

	Private Sub preencheGrid() 
		Dim usuarios(3) As usuario 
		Dim aux As usuario 

		"Inclusão do primeiro usuário 
		aux = New usuario() 
		aux.nome = "Daniele" 
		aux.idade = 20 
		aux.registro = "ABC123" 
		usuarios(0) = aux 

		"Inclusão do segundo usuário 
		aux = New usuario() 
		aux.nome = "Leticia" 
		aux.idade = 21 
		aux.registro = "ABC456" 
		usuarios(1) = aux 

		"Inclusão do terceiro usuário 
		aux = New usuario() 
		aux.nome = "Roberta" 
		aux.idade = 22 
		aux.registro = "ABC789" 
		usuarios(2) = aux 
		DataGrid1.SetDataBinding(usuarios, "") 
	End Sub 

	Private Sub atribuicaoDoEstilo() 
		"Primeiro passo é a criação do obj tipo DataGridTableStyle, 
		"a "interface" entre o DataGrid e a aparência que irá moldar. 
		Dim tbEstilo As New DataGridTableStyle() 
		" Atribua o mapeamento da tabela, como nossa DataGrid, 
		"só estará recebendo informações do tipo "usuario", 
		"essa será a atribuição, sussedida por "[]" para indicação da classe. 
		tbEstilo.MappingName = "usuario[]" 

		" Vamos configurar uma alternancia de cor por linha 
		tbEstilo.AlternatingBackColor = System.Drawing.Color.AntiqueWhite 
		
		" Agora vamos a edição das Colunas 
		Dim colNome As New DataGridTextBoxColumn() 
		"a atribuição do MappingName é referente a propriedade da classe 
		colNome.MappingName = "nome" 
		colNome.HeaderText = "Nome da Pessoa" 
		colNome.Width = "200" 

		Dim colIdade As New DataGridTextBoxColumn() 
		colIdade.MappingName = "idade" 
		colIdade.HeaderText = "Idade" 
		colIdade.Width = "40" 

		Dim colRegistro As New DataGridTextBoxColumn() 
		colRegistro.MappingName = "registro" 
		colRegistro.HeaderText = "Registro do Usuário" 
		colRegistro.Width = "120" 

		" Agora adicionamos as colunas ao obj table style. 
		With tbEstilo.GridColumnStyles 
			.Add(colNome) 
			.Add(colIdade) 
			.Add(colRegistro) 
		End With 
		
		" Adicione a table style ao grid, mas limpe a coleção primeiro 
		DataGrid1.TableStyles.Clear() 
		DataGrid1.TableStyles.Add(tbEstilo) 
	End Sub 
End Class 

Public Class usuario 
	Private strNome As String 
	Private strRegistro As String 
	Private intIdade As Integer 

	Property nome() As String 
		Get 
			Return strNome 
		End Get 
		Set(ByVal Value As String) 
			strNome = Value 
		End Set 
	End Property 

	Property registro() As String 
		Get 
			Return strRegistro 
		End Get 
		Set(ByVal Value As String) 
			strRegistro = Value 
		End Set 
	End Property 

	Property idade() As Integer 
		Get 
			Return intIdade 
		End Get 
		Set(ByVal Value As Integer) 
			intIdade = Value 
		End Set 
	End Property 
End Class 

Foi utilizado para este artigo:

  • Visual Studio .NET 2002
  • .NET Framework 1.0
  • Linguagem VB.NET
André Luis Calderan

André Luis Calderan