Datagrid em Windows Presentation Foundation

Datagrid em Windows Presentation Foundation

Neste artigo pretendo apresentar a Datagrid em Windows Presentation Foundation (WPF) na .Net Framework 4.0. Vou começar por uma breve apresentação teórica e em seguida irei apresentar vários exemplos. De salientar que não terei em conta Design Patterns.

A DataGrid é um controlo que permite apresentar dados, representando cada linha um item de uma lista de objectos do mesmo tipo e as colunas representam as várias características do objecto. Ou seja, se na instância da datagrid apresento uma lista de empregados, cada linha representa um empregado e cada coluna representa uma propriedade do empregado.

A classe DataGrid está incluída no namespace System.Windows.Controls e é um selector que permite seleccionar mais do que um item ao mesmo tempo e tem por base a classe ItemsControl, que é um Controlo e que implementa a interface IAddChild. A seguinte imagem mostra-nos esta hierarquia de classes.

WPF Datagrids: hierarquia de classes

Vejamos agora algumas propriedades, métodos e eventos relevantes da DataGrid.

As propriedades mais relevantes são:

  • Name: permite definir o nome.
  • Foreground: permite definir a cor da letra.
  • Background: permite definir a cor de fundo.
  • AlternatingRowBackground; AlternationIndex: permitem definir a cor de fundo de cada linha, de forma alternada.
  • Width; Height; MaxHeight; MinWidth; MaxWidth; MinHeight: permitem definir a largura, altura e seus valores mínimos e máximo.
  • ActualHeight; ActualWidth: permitem obter qual é o valor actual da altura e da largura.
  • ColumnWidth; MaxColumnWidth; MinColumnWidth; ColumnHeaderHeight: permitem definir a largura, largura máxima, largura mínima e a altura do cabeçalho da coluna.
  • RowHeight; MinRowHeight: permitem definir a altura e altura mínima da linha.
  • GridLinesVisibility: permite definir a visibilidade das linhas que delimitam as linhas e colunas. Caso sejam visíveis as propriedades HorizontalGridLinesBrush e VerticalGridLinesBrush permitem definir aparência das linhas.
  • SelectionMode; SelectionUnit: permitem definir o modo de selecção dos itens, ou seja, se é possível seleccionar mais de que um item e se é permitido seleccionar linha(s) completa(s) ou célula(s).
  • AutoGenerateColumns: permite gerar automáticas as colunas da datagrid. Para a geração automática é considerada todas as propriedades do tipo de objecto em causa, ou no caso de se estar a usar um dataTable a geração é baseada nas colunas da dataTable.
  • Columns: permite obter a colecção de colunas.
  • CellStyle: permite definir o estilo da célula.
  • ColumnHeaderStyle: permite definir o estilo do cabeçalho da coluna.
  • CanUserAddRows: permite que o utilizado adicione novos itens.
  • CanUserDeleteRows: permite que o utilizado apague itens.
  • CanUserReorderColumns: permite que o utilizador organize as colunas.
  • CanUserResizeColumns: permite que o utilizador redimensione as colunas.
  • CanUserResizeRows: permite que o utilizador redimensione as linhas.
  • CanUserSortColumns: permite que o utilizador ordene os itens ao fazer duplo clique no cabeçalho da coluna.
  • CurrentColumn: permite obter a coluna actual.
  • CurrentCell: permite obter a célula actual.
  • CurrentItem: permite saber o item actual.
  • SelectedCells: permite saber quais as células que estão seleccionadas.
  • SelectedIndex: permite saber qual o index do item seleccionado.
  • SelectedItem: permite obter o item que está seleccionado.
  • SelectedItems: permitem saber os itens que estão seleccionados.
  • HasItems: permite saber se a datagrid contém itens.
  • Items: permite obter a lista de itens.
  • ItemsSource: permite obter a lista de itens.
  • ItemTemplate; ItemTemplateSelector: permitem definir o template aplicar aos itens.

Nota: Existem diferenças entre a propriedade Items e a propriedade ItemsSource e apenas se pode usar uma delas. Quando se usa a propriedade ItemsSource, não é possível adicionar ou remover itens através desta propriedade ou através da propriedade Items. No entanto, se atribuirmos uma ObservableCollection ao ItemsSource, essa questão é ultrapassada.

Os métodos mais relevantes são:

  • BeginEdit: permite invocar o comando BeginEditCommand, que será responsável por alterar para modo de edição a linha ou célula seleccionada.
  • CommitEdit: permite invocar o comando CommitEditCommand para célula ou linha que está em modo de edição.
  • CancelEdit: permite invocar o comando CancelEditCommand para célula ou linha que está em modo de edição.

Os eventos mais relevantes são:

  • BeginningEdit: ocorre antes da célula ou linha entrar em modo de edição.
  • PreparingCellForEdit: ocorre quando a célula entra em modo de edição.
  • CellEditEnding: ocorre antes de haver um “commit” da célula ou antes de ser cancelada a edição.
  • RowEditEnding: ocorre antes de haver um “commit” da linha ou antes de ser cancelada a edição.
  • SelectionChanged: ocorre quando a selecção é alterada.
  • CurrentCellChanged: ocorre quando o valor da propriedade CurrentCell é alterado.
  • SelectedCellsChanged: ocorre quando o valor da propriedade SelectedCells é alterado.

Nota: O leitor que pretenda efectuar um estudo mais pormenorizado sobre as propriedades, métodos e eventos da DataGrid, deve consultar a página DataGrid Class no MSDN: http://bit.ly/ewIdaP

Antes de passarmos aos exemplos práticos, vejamos os vários tipos de colunas da DataGrid.

Em WPF, podemos definir os seguintes tipos de colunas:

  • DataGridTextColumn: permite apresentar e editar texto;
  • DataGridCheckBoxColumn: permite atribuir um valor lógico (verdadeiro / falso)
  • DataGridComboBoxColumn: permite seleccionar uma opção de um conjunto de opções;
  • DataGridHyperlinkColumn: permite adicionar uma hiperligação;
  • DataGridTemplateColumn: permite definir o template da coluna, isto é, podemos customizar a coluna.

O seguinte diagrama, permite-nos perceber melhor qual a classe de base de cada tipo de coluna.

WPF Datagrids: classes de colunas