WPF - Usando o Componente DataGrid


O WPF - Windows Presentantion Fundation - possui muitos componentes com grande facilidade de configuração e a partir de 2008 (a partir da liberação da versão 3.5 da NET Framework SP1 e do Visual Studio 2008 SP1) foi incluído o componente DataGrid de grande versatilidade e que veio preencher uma lacuna que faltava entre os componentes WPF. Então vamos dar uma espiada no controle DataGrid...

O componente DataGrid da WPF faz parte do WPF ToolKit e para incluir este componente em seu projeto você deve seguir os seguintes passos:

Vamos agora mostrar como usar este componente em aplicações WPF.

Estou usando o Visual Basic 2008 Express Edition e o banco de dados SQL Server 2005 Express Edition.

Abra o seu Visual Basic 2008 Express Edition e crie um novo projeto do tipo WPF Aplication com o nome WPFDataGrid;

Exibindo dados no DataGrid

Vamos acessar o banco de dados Northwind.mdf e exibir os dados da tabela Products no componente DataGrid;

Para isso inclua a partir da ToolBox o componente um DataGrid e um controle Button conforme o leiaute abaixo:

O código do arquivo window1.xaml gerado deverá ser o seguinte:

<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:dg="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
    Title="Preenchendo um DataGrid" Height="297" Width="570" >
    <Grid>
        <dg:DataGrid Margin="18,10,12,41" Name="DataGrid1" ItemsSource="{Binding}" />
        <Button Height="23" Margin="18,0,0,9" Name="btnPreencherGrid" VerticalAlignment="Bottom" Width="117">Preencher Grid</Button>
    </Grid>
</Window

Observe a declaração do namespace do DataGrid:

xmlns:dg="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"

Note que com apenas uma linha de código definimos a vinculação do componente com a fonte de dados:

<dg:DataGrid Margin="18,10,12,41" Name="DataGrid1" ItemsSource="{Binding}" />

A seguir temos que incluir o código que acessa o banco de dados Northwin.mdf e seleciona os produtos. Fazemos isso no code-behind do arquivo window1.xaml.vb definindo uma rotina chamada preencheGrid() :

Private Sub preencheGrid()
        Dim dt As New DataTable
        Dim strConn As String = "Server = .\sqlexpress;Database = NorthWind; Integrated Security = SSPI;"
        Dim conn As New SqlConnection(strConn)
        Dim da As New SqlDataAdapter("Select * from Products", conn)
        da.Fill(dt)
        Me.DataContext = dt.DefaultView
    End Sub

No evento Click do botão de comando - Preencher Grid , chamamos a rotina:

Private Sub btnPreencherGrid_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnPreencherGrid.Click
        preencheGrid()
 End Sub

O resultado obtido pela execução do projeto é mostrado abaixo:

Muito fácil não é mesmo ?

Além disso temos disponíveis os seguintes recursos no DataGrid:

Nota: Podemos inclusive efetuar a ordenação usando mais de uma coluna. Basta pressionar a tecla SHIFT e selecionar as colunas pelas quais desejamos efetuar a ordenação.

Obs: A inserção de de dados e a remoção de dados, pressionando a tecla DEL, podem ser realizadas mas não são persistidas no banco de dados.

Estes comportamentos podem ser controlados pelas seguintes propriedades:

Na edição de uma célula os seguintes eventos são disparados:

Como eu já havia dito o DataGrid é muito versátil e possui diversas opções de personalização do controle como mudança de cores, fontes, etc. Como um exemplo veja a seguir como é simples gerar um Grid com cores alternadas dando o efeito zebrado.

Para isso devemos alterar a declaração do DataGrid definindo as propriedades AlternationCount, RowBackGround e AlternatingRowBackground no arquivo XAML conforme abaixo:

<dg:DataGrid Margin="18,10,12,41" Name="DataGrid1" ItemsSource="{Binding}" 
    AutoGenerateColumns="True" AlternationCount="2" RowBackground="Aqua" 
    AlternatingRowBackground="White" />

O resultado pode ser visto na figura abaixo:

- A propriedade AlternationCount indica em quantas linhas a cor deve ser alterada;
- A propriedade RowBackGround indica a cor de fundo;
- A propriedade AlternatingRowBackground indica a cor da linha alterada;

Além disso o DataGrid possui quatro tipos de colunas:

Qualquer um destes tipos de colunas pode ser especificado na coleção Columns do DataGrid. Além disso elas incluem uma variedade de propriedades que permitem uma customização da aparência e comportamento das colunas como Header, Binding, Width, etc.

Mas como podemos configurar as colunas no descritor ? Boa pergunta garoto...

Se você clicar com o botão direito do mouse sobre o componente DataGrid no descritor vera a opção DataGrid no menu suspenso que ao ser selecionada traz o seguinte aviso: You need to set ItemsSource to enable some column operations.

O problema é que o descritor DataGrid não permite que você inspecione o conteúdo da propriedade ItemsSource do DataGrid se ele foi originado a partir no code-behind como foi o nosso caso.

Uma forma de contornar o problema e usar um ObjectDataProvider, mas isso é assunto para outro artigo...

Aguarde mais dicas sobre WPF.

Pegue o projeto completo aqui: WPFDataGrid.zip

Eu sei é apenas WPF, mas eu gosto...

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 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti