Muitas
vezes precisamos alimentar um DataGrid dinamicamente, com o WPF está tarefa
ficou bem fácil, vamos ao exemplo.
Iremos
criar um programa para exibir o alfabeto em maiúsculo , um contador e o código
ASCII da letra dentro de um DataGrid assim que o usuário pressionar o botão.
Vamos
inserir um botão e um DataGrid, como o intuito aqui é alimentar dinamicamente o
DataGrid, vamos alterar a propriedade AutoGenerateColumns para true dentro do XAML , assim o DataGrid
vai gerar as colunas para nós, abaixo segue como o código deve ficar :
<my:datagrid autogeneratecolumns="true" margin="12,42,12,20" name="dataGrid1" xmlns:my="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"> </my:datagrid>
No
código vamos criar uma simples classe apenas com os atributos, segue o código:
public class LetraNumero
{
public int Posicao { get; set; }
public char Letra { get; set; }
public int ASCII { get; set; }
}
Segue o
código do evento Click do botão :
private void button1_Click(object sender, RoutedEventArgs e)
{
// Cria lista para os objetos (está lista tem que ser do tipo Generic)
List<letranumero> lista = new List<letranumero>();
// Rotina para alimentar a lista
for (int i = 1; i < 27; i++)
{
LetraNumero item = new LetraNumero();
item.Posicao = i;
item.Letra = Convert.ToChar(64 + i);
item.ASCII = 64 + i;
lista.Add(item);
}
// Vinculando a lista ao grid
dataGrid1.ItemsSource = lista;
}
A
propriedade ItemsSource do DataGrid aceita uma lista do tipo Generic e como a
propriedade AutoGenerateColumns está como true, ele vai criar uma coluna para
cada atributo da classe definida na lista. Abaixo segue o exemplo da tela em
execução:
Se for
preciso, podemos alterar o titulo da coluna (pois ele sempre deixa a coluna com
o nome da propriedade da classe) ou mesmo ocultar a coluna. Criei um outro
botão com o mesmo código e inserir essas duas linhas, uma para renomear a
coluna Posicao para Posição e a outra para ocultar a coluna ASCII:
// Altera o titulo da coluna 0
dataGrid1.Columns[0].Header = "Posição";
// Deixa a coluna 2 invisivel
dataGrid1.Columns[2].Visibility = Visibility.Hidden;
Executando
o botão, verifique como ficou a tela:
Referências: