środa, 26 grudnia 2012

70-511 Rozdział 8 - DataGrid

Kontrolka ta jest analogiczna do DataGridView z WindowsForms, tylko przeznaczona dla WPF. Dane do których chcemy się bindować muszą implementować interfejs IEnumerable. Domyślnie zostaną stworzone kolumny na podstawie nazw pól klasy której obiekty są bindowane do DataGrid. Źródło danych ustawiamy przez właściwość ItemsSource. Możemy ją przypisać zarówno w kodzie jak i XAML-u:

Code:
dgCustomers.ItemsSource = customerRepository.GetAllCustomers();

Code:
        <DataGrid Name="dgCustomers" ItemsSource="{Binding}">
            
        </DataGrid>

Podobnie jak w DGV mamy predefiniowane typy kolumn:
  • DataGridTextBoxColumn - dane tekstowe
  • DataGridComboBoxColumn - dane do wyboru z listy (ComboBox)
  • DataGridCheckBoxColumn - dane logiczne
  • DataGridHyperlinkColumn - linki do danych
Jeżeli dostępne typy kolumn nam nie wystarczają możemy skorzystać z DataGridTemplateColumn. Szablon pozwala zdefiniować wygląd każdego z elementów kolumny. Możemy także skorzystać z właściwości TemplateSelector, wybierając szablon na podstawie zdefiniowanej logiki.
Przykładowa kolumna z własnym stylem:

Code:
<DataGrid Name="dgCustomers" ItemsSource="{Binding}">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="TemplateColumn" >
                    <DataGridTemplateColumn.CellTemplate>
                        <ItemContainerTemplate>
                            <Grid>
                                <Rectangle>
                                    <Rectangle.Fill>
                                        <SolidColorBrush Color="Blue"></SolidColorBrush>
                                    </Rectangle.Fill>
                                </Rectangle>
                                <TextBlock Text="{Binding FirstName}" Foreground="Chartreuse"></TextBlock>
                            </Grid>
                        </ItemContainerTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>



Ciekawą opcją jest możliwość wyświetlenia dodatkowych informacji o zaznaczonym rekordzie (RowDetailsTemplate). Jeżeli dana tabela ma wiele kolumn, możemy wyświetlić najczęściej używane dane, a pozostałe wyświetlać w momencie kiedy tego sobie zażyczy użytkownik.
Przykład:

Code:
            <DataGrid.RowDetailsTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="25" />
                            <RowDefinition Height="25" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="50" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="Imię: " Grid.Row="0" />
                        <TextBlock Text="{Binding FirstName}" Grid.Column="1" />
                        <TextBlock Text="Imię: " Grid.Row="1" />
                        <TextBlock Text="{Binding LastName}" Grid.Row="1" Grid.Column="1" />
                    </Grid>
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>



Dodatkowe właściwości które możemy ustawić:
  • RowDetailsVisibilityMode - tryb wyświetlania wiersza szczegółów, możliwe tryby:
    • VisibleWhenSelected - domyślny tryb - wiersz widoczny dla zaznaczonego rekordu
    • Visible - widoczny dla wszystkich rekordów
    • Collapsed - brak widoczności wiersza szczegółów
  •  RowDetailsTemplateSelector - logika wyboru szablonu dla wiersza szczegółów
 Kody: http://sdrv.ms/UHcTum

1 komentarz:

  1. Chcę usunąć zaznaczony w datagrid wpf rekord z bazy ale nie wiem jak to zrobić. Uczę się i chcę to ogarnąć, szukam w google ale nie wiele mi to daje, albo źle szukam albo tego nie ma. Proszę pomocy. Dzięki z góry

    OdpowiedzUsuń