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;
            }
        }