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 CalderanO 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
- Entity Framework 4: Repositório GenéricoVisual Basic .NET
- As edições 14 da Easy .net Magazine e 88 da .net Magazine já estão disponíveis.ADO.NET
- Postando no Twiiter com .NET e Migre.meC#
- Setup ApplicationsVisual Basic .NET
- Problemas na manipulação de arquivos do MS Excel com .NETVisual Basic .NET