Array
(
)

WPF - DataGrid

André Moes
   - 24 out 2012

Olá pessoal, estou criando um aplicativo em WPF e estou com dificuldades em lidar com o DataGrid!
Até agora já consegui puxar os dados de uma list para exibir dentro do DataGrid, mas não consigo manipulá-lo corretamente.
Por Exemplo: Não consigo fazer com que o conteúdo preencha no tamanho do DataGrid, ele vem num pequeno canto apenas.
Tem como eu formatar o conteúdo mesmo que ele seja distribuído dinamicamente?
Queria fazer com que preenchesse todo o espaço disponibilizado, formatar o conteúdo(tamanho e cor dos caracteres) e mudar nome de colunas( tenho que especificar que sejam "AutoColumGenerate = true" para funcionar)!
Desde já agradeço!

Joel Rodrigues
   - 25 out 2012

Olá, André. Vou te passar alguns links de referência sobre esse controle, beleza? Sugiro dar uma lida neles, pois tem muito conteúdo interessante.
1) http://wpftutorial.net/DataGrid.html
2) http://www.macoratti.net/10/03/wpf_dtg1.htm
3) http://www.codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples

Boa sorte.

André Moes
   - 26 out 2012


Citação:
Olá, André. Vou te passar alguns links de referência sobre esse controle, beleza? Sugiro dar uma lida neles, pois tem muito conteúdo interessante.
1) http://wpftutorial.net/DataGrid.html
2) http://www.macoratti.net/10/03/wpf_dtg1.htm
3) http://www.codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples

Boa sorte.


Muito Obrigado!!!
Ajudou bastante, principalmente o primeiro link!

Agora comecei a compreender o Binding

mas ainda faltam algumas coisas pra dominar e não encontrei em lugar algum
talvez pela maneira que populei a datagrid, não possua a função que eu deseje

OBS: não tenho wpf toolkit, nem posso instalá-lo aqui.

O que ainda falta:

1) Coonfigurar o texto do Header (Cabeçalho) das colunas. ex: tamanho e cor
2) Centralizar o conteúdo que vem pelo binding na coluna. TextBlock.TextAligment="Center" não funciona!
3) E gostaria que o conteúdo viesse e se ajusta-se ao tamanho da datagrid, ou que pelo menos eu pudesse configurar isso no braço mesmo! (tive que setar o tamanho do conteúdo populado para ficar do tamanho correto)

Aqui vai o código até agora:

1º - código XAML do que tem até agora.

2º - código C# com a função de setar a cor de fundo das duas primeiras linhas.

#Código
<DataGrid AutoGenerateColumns="False" Height="397" HorizontalAlignment="Center" Margin="639,53,10,0" Name="dataGridB" VerticalAlignment="Top" Width="535" LoadingRow="dataGrid_LoadingRow" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeColumns="False" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn TextBlock.FontSize="25" TextBlock.FontWeight="Bold" TextBlock.Foreground="Blue" TextBlock.TextAlignment="Justify" Header="Jogador" Binding="{Binding Jogador}" />
<DataGridTextColumn TextBlock.FontSize="25" TextBlock.FontWeight="Bold" TextBlock.Foreground="Blue" TextBlock.TextAlignment="Center" Header="Pts" Binding="{Binding Pontos}" />
<DataGridTextColumn TextBlock.FontSize="25" TextBlock.FontWeight="Bold" TextBlock.Foreground="Blue" TextBlock.TextAlignment="Center" Header="GM " Binding="{Binding GolsMarcados}" />
<DataGridTextColumn TextBlock.FontSize="25" TextBlock.FontWeight="Bold" TextBlock.Foreground="Blue" TextBlock.TextAlignment="Center" Header="GS" Binding="{Binding GolsSofridos}" />
<DataGridTextColumn TextBlock.FontSize="25" TextBlock.FontWeight="Bold" TextBlock.Foreground="Blue" TextBlock.TextAlignment="Center" Header="SG" Binding="{Binding SaldoGols}" />
</DataGrid.Columns>
</DataGrid>


#Código

public partial class Grupos : Window
{
public int contador;

public Grupos(string MesEtapa, int AnoEtapa)
{
InitializeComponent();
dataGridA.ItemsSource = GrupoTabela.LoadGrupo();

dataGridB.ItemsSource = GrupoTabela.LoadGrupo();
}

private void dataGrid_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
{
DataGridRow item = e.Row as DataGridRow;

contador = contador + 1;

if (item != null && contador < 3)
{
e.Row.Background = new SolidColorBrush(Colors.Goldenrod);
}
}
}

André Moes
   - 26 out 2012

Fiz de uma maneira diferente agora e encontrei os comandos para manipular cabeçalho e header da datagrid:

1) DataGrid personalizada

2) Código C# para colorir o fundo das duas primeiras linhas (foreground)

Na questão das cores, elas vem tudo certo, mas quando eu clico na linha que tem e clico em outra datagrid a cor da linha some, alguém sabe me dizer o que é isso?

#Código
<!-- DataGrid = Exibindo grupo direto do banco de dados: GRUPO A-->
<DataGrid AutoGenerateColumns="False" Margin="30,39,610,0" Name="dataGridA" LoadingRow="dataGrid_LoadingRow" ScrollViewer.HorizontalScrollBarVisibility="Hidden" GridLinesVisibility="None"
CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" IsReadOnly="True" BorderBrush="Blue" Height="406" VerticalAlignment="Top" >
<!-- Columns / TextColumn = Definindo propriedades de cada coluna(Cabeçalho), assim como seu respectivo conteúdo(Dados do Grupo) -->
<DataGrid.Columns>
<DataGridTextColumn TextBlock.FontSize="24" TextBlock.FontWeight="Bold" TextBlock.Foreground="Blue" Header="JOGADOR - TIME" Binding="{Binding Jogador}" />
<DataGridTextColumn TextBlock.FontSize="24" TextBlock.FontWeight="Bold" TextBlock.Foreground="Blue" Header="PTS" Binding="{Binding Pontos}" />
<DataGridTextColumn TextBlock.FontSize="24" TextBlock.FontWeight="Bold" TextBlock.Foreground="Blue" Header="GM " Binding="{Binding GolsMarcados}" />
<DataGridTextColumn TextBlock.FontSize="24" TextBlock.FontWeight="Bold" TextBlock.Foreground="Blue" Header="GS" Binding="{Binding GolsSofridos}" />
<DataGridTextColumn TextBlock.FontSize="24" TextBlock.FontWeight="Bold" TextBlock.Foreground="Blue" Header="SG" Binding="{Binding SaldoGols}" />
</DataGrid.Columns>
<!-- ColumnHeaderStyle = Definindo o estilo dos cabeçalhos -->
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontSize" Value="20" />
<Setter Property="FontFamily" Value="Comic Sans" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.ColumnHeaderStyle>
<!-- RowStyle = Definindo o estilo das linhas(apenhas alinhamento central) -->
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="TextBlock.TextAlignment" Value="Center" ></Setter>
</Style>
</DataGrid.RowStyle>
</DataGrid>


#Código
// Função para colorir o fundo das duas primeiras linhas de cada DataGrid ={Primeiro e Segundo lugar do grupo}
private void dataGrid_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
{
DataGridRow item = e.Row as DataGridRow;

switch (item.GetIndex())
{
case 0: e.Row.Background = new SolidColorBrush(Colors.Gray);
break;
case 1: e.Row.Background = new SolidColorBrush(Colors.DarkGray);
break;
}
}