IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Fakturačný systém v C # .NET - Štýly a DataBinding

Minule sme v tutoriálu riešili grafické rozhranie vo WPF. Dnes naše rozhranie obohatíme o štýly a DataBinding.

Štýly

Štýly nám slúži, rovnako ako v CSS, ku zmene vlastností grafických prvkov. V súbore App.xaml sa definujú štýly, ktoré platí pre celú aplikáciu. Štýly sa vkladajú do elementu Resources. Parametrom TargetType sa definuje, pre aký objekt sa má štýl použiť. V elementu Setter v jeho parametri Property vyberieme property objektu, ktorú chceme zmeniť.

Nadefinujeme si vonkajšie okraje pre všetky tlačidlá v aplikácii.

<Application.Resources>
    <Style TargetType="{x:Type Button}">
        <Setter Property="Margin" Value="2"/>
    </Style>

</Application.Resources>

Táto zmena nám zruší okraje bunky, na ktorú sme klikli v údajová mriežka.

<Style  TargetType="{x:Type DataGridCell}"   >
    <Setter Property="BorderThickness" Value="0"/>
</Style>

Pridáme ďalšie štýly, ktoré nám našu aplikáciu po vzhľadovej stránke upraví.

<Style TargetType="{x:Type Label}">
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
    <Setter Property="FontWeight" Value="Bold"/>
</Style>
<Style  TargetType="{x:Type TextBox}"   >
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="FontWeight" Value="Bold"/>
    <Setter Property="Margin" Value="0,2,35,2" />
</Style>
<Style  TargetType="{x:Type TextBlock}"   >
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
</Style>

Môžeme si všimnúť, že okamžite po pridaní štýlov sa nám aplikácie v Designeri zmenila.

Po spustení vyzerá aplikácie nasledovne.

Ostylování aplikácie v C# .NET WPF - Databázy v C # - ADO.NET

DataBinding

Slúži nám k prepojeniu dát s kontrolkami. Náš dataGridPersons generuje automaticky názvy stĺpcov. Tieto názvy sa nám nepáči a preto si ich vytvoríme sami použitím DataBinding.

Najskôr v dataGridPersons nastavíme parameter AutoGenerateColumns = "False". Potom vložíme definíciu stĺpcov. Okrem definície šablóny (template) názvu stĺpčeku, definujeme šablónu pre bunku, v ktorej sa nám zobrazia dáta. V tejto bunke budeme mať TextBlock s nabindování property Text.

<DataGrid.Columns>
    <DataGridTemplateColumn Header="Jméno" Width="SizeToCells" MinWidth="50"  IsReadOnly="True" >
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock  Text="{Binding Name}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    <DataGridTemplateColumn Header="Příjmení" Width="SizeToCells" MinWidth="60" IsReadOnly="True">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock  Text="{Binding Surname}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

</DataGrid.Columns>

Úplne rovnakým spôsobom si vytvoríme ostatné stĺpce. Týmto máme DataBinding DataGrid hotový. Teraz si vytvoríme DataBinding na textbox v Gridu.

Nabindování textbox.

<TextBox Grid.Row="0" Grid.Column="1" Name="txtName" >
    <TextBox.Text>
        <Binding Path="Name" >

        </Binding>
    </TextBox.Text>
</TextBox>

Opäť tento binding urobíme rovnako aj pre zostávajúce textbox.

Po kliknutí na záznam v údajová mriežka "pošleme" objekt Person do Gridu, tam sa dáta zobrazia v nabindovaných textbox, do ktorých nepôjde písať. Až po kliknutí na Upraviť.

private void dataGridPersons_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (dataGridPersons.SelectedItem is Person)
    {
        gridPerson.DataContext = (Person)dataGridPersons.SelectedItem;
        SetPersonButtons(true, true, false, true);
        SetPersonTxt(false);
    }
}

A metóda SetPersonTxt ():

public void SetPersonTxt(bool enabled)
{
    txtDIC.IsEnabled = enabled;
    txtEmail.IsEnabled = enabled;
    txtICO.IsEnabled = enabled;
    txtName.IsEnabled = enabled;
    txtSurname.IsEnabled = enabled;
    txtCity.IsEnabled = enabled;
    txtStreet.IsEnabled = enabled;
    txtPSC.IsEnabled = enabled;
}

Rovnakým spôsobom upravíme aj InvoicesControl.

Účtovníctvo v C# .NET - Databázy v C # - ADO.NET

Úpravy navyše sú nasledujúce.

Zobrazenie dátumu si naformátujeme iba na samotný dátum.

<TextBlock Text="{Binding Date, StringFormat= dd/MM/yyyy}"  />

V DataGdiru chceme zobraziť odberateľa i dodávateľa. Do bunky vložíme StackPanel s nabindovanými TextBlocky.

 <DataGridTemplateColumn Header="Odběratel" Width="SizeToCells" MinWidth="80"  IsReadOnly="True" >
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
             <StackPanel Orientation="Horizontal">
                 <TextBlock Text="{Binding PersonCustomer.Surname}"/>
                 <TextBlock Text=" "/>
                 <TextBlock Text="{Binding PersonCustomer.Name}" />
                 <TextBlock Text=", IČO: "/>
                 <TextBlock Text="{Binding PersonCustomer.ICO}"  />
                 <TextBlock Text=", DIČ: "/>
                 <TextBlock Text="{Binding PersonCustomer.DIC}" />
             </StackPanel>
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Pre zobrazenie odberateľov a dodávateľov sme použili dva ComboBox. Ich nabindování by bolo podobné ako v údajová mriežka (viď. Vyššie), ale keďže obaja budú zobrazovať rovnaké dáta, tak si vytvoríme šablónu. Táto šablóna bude použitá u oboch ComboBox. Definujeme ju v nadradenom Gridu, aby mohla byť použitá v oboch ComboBox.

<Grid.Resources>
   <DataTemplate x:Key="PersonTemplate">
      <StackPanel Orientation="Horizontal">
          <TextBlock Text="{Binding Surname}"/>
          <TextBlock Text=" "/>
          <TextBlock Text="{Binding Name}" />
          <TextBlock Text=", IČO: "/>
          <TextBlock Text="{Binding ICO}"  />
          <TextBlock Text=", DIČ: "/>
          <TextBlock Text="{Binding DIC}"  />
      </StackPanel>
   </DataTemplate>
</Grid.Resources>

Do parametrov combobox zapíšeme tento parameter, čím bude použitá naša šablóna pre zobrazenie dát.

ItemTemplate="{StaticResource PersonTemplate}"

Metóda pre zobrazenie dát v Gridu bude vyzerať nasledovne.

private void dataGridInvoices_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (dataGridInvoices.SelectedItem is Invoice)
    {
        Invoice selectedInvoice = (Invoice)dataGridInvoices.SelectedItem;
        gridInvoice.DataContext = selectedInvoice;
        cmbCustomer.SelectedItem = selectedInvoice.PersonCustomer;
        cmbSupplier.SelectedItem = selectedInvoice.PersonSupplier;
        SetInvoiceButtons(true, false, true);
        SetInvoiceTxt(false);
    }
}

Metódu Init upravíme. Po spustení programu sa naplní dátami aj textbox.

public void Init(DataManager manager)
{
    this.manager = manager;
    dataGridInvoices.ItemsSource = manager.Invoices;
    cmbCustomer.ItemsSource = manager.Persons;
    cmbSupplier.ItemsSource = manager.Persons;
}

Záverom

Výsledkom našej dnešnej práce je nastylování aplikácie a nabindování dát.

Štýly a binding v C# .NET WPF - Databázy v C # - ADO.NET

Nabudúce si implementujeme validácie pre textbox a vytváranie nových osôb a faktúr.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 690x (13.3 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Všetky články v sekcii
Databázy v C # - ADO.NET
Článok pre vás napísal Petr Domes (petrds)
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programuji v .NET. Ovládám C#, .ASP, WF, WPF, SQL
Aktivity