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.
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 propriedadesHorizontalGridLinesBrush
eVerticalGridLinesBrush
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.