Sdílet prostřednictvím


Návod: Připojení k datům v hybridních aplikacích

Vytvoření vazby zdroje dat k ovládacímu prvku je nezbytné pro poskytování přístupu uživatelů k podkladovým datům bez ohledu na to, jestli používáte model Windows Forms nebo WPF. Tento návod ukazuje, jak můžete používat datové vazby v hybridních aplikacích, které zahrnují ovládací prvky model Windows Forms i WPF.

Mezi úlohy znázorněné v tomto názorném postupu patří:

  • Vytvoření projektu

  • Definování šablony dat

  • Určení rozložení formuláře

  • Určení datových vazeb

  • Zobrazení dat pomocí spolupráce

  • Přidání zdroje dat do projektu

  • Vazba ke zdroji dat

Kompletní výpis kódu úloh, které jsou znázorněny v tomto názorném postupu, najdete v části Datové vazby v ukázce hybridních aplikací.

Až budete hotovi, budete mít přehled o funkcích datových vazeb v hybridních aplikacích.

Požadavky

K dokončení tohoto návodu budete potřebovat následující komponenty:

  • Visual Studio.

  • Přístup k ukázkové databázi Northwind spuštěné na Microsoft SQL Serveru

Vytvoření projektu

Vytvoření a nastavení projektu

  1. Vytvořte projekt aplikace WPF s názvem WPFWithWFAndDatabinding.

  2. V Průzkumník řešení přidejte odkazy na následující sestavení.

    • WindowsFormsIntegration

    • System.Windows.Forms

  3. Otevřete MainWindow.xaml v Návrháři WPF.

  4. Do elementu Window přidejte následující mapování oborů názvů model Windows Forms.

    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    
  5. Pojmenujte výchozí Grid prvek mainGrid přiřazením Name vlastnosti.

    <Grid x:Name="mainGrid">
    

Definování šablony dat

Hlavní seznam zákazníků se zobrazí v ovládacím ListBox prvku. Následující příklad kódu definuje DataTemplate objekt s názvem ListItemsTemplate , který řídí vizuální strom ListBox ovládacího prvku. Toto DataTemplate je přiřazeno vlastnosti ListBox ovládacího prvku ItemTemplate .

Definování šablony dat

  • Zkopírujte následující kód XAML do deklarace elementu Grid .

    <Grid.Resources>
        <DataTemplate x:Key="ListItemsTemplate">
            <TextBlock Text="{Binding Path=ContactName}"/>
        </DataTemplate>
    </Grid.Resources>
    

Určení rozložení formuláře

Rozložení formuláře je definováno mřížkou se třemi řádky a třemi sloupci. Label Jsou k dispozici ovládací prvky pro identifikaci jednotlivých sloupců v tabulce Zákazníci.

Nastavení rozložení mřížky

  • Zkopírujte následující kód XAML do deklarace elementu Grid .

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    

Nastavení ovládacích prvků Popisek

  • Zkopírujte následující kód XAML do deklarace elementu Grid .

    <StackPanel Orientation="Vertical" Grid.Row="0" Grid.Column="1">
        <Label Margin="20,38,5,2">First Name:</Label>
        <Label Margin="20,0,5,2">Company Name:</Label>
        <Label Margin="20,0,5,2">Phone:</Label>
        <Label Margin="20,0,5,2">Address:</Label>
        <Label Margin="20,0,5,2">City:</Label>
        <Label Margin="20,0,5,2">Region:</Label>
        <Label Margin="20,0,5,2">Postal Code:</Label>
    </StackPanel>
    

Určení datových vazeb

Hlavní seznam zákazníků se zobrazí v ovládacím ListBox prvku. Připojená ListItemsTemplate vazba TextBlock ovládacího prvku na ContactName pole z databáze.

Podrobnosti o každém záznamu zákazníka se zobrazují v několika TextBox ovládacích prvcích.

Určení datových vazeb

  • Zkopírujte následující kód XAML do deklarace elementu Grid .

    Třída Binding sváže TextBox ovládací prvky s příslušnými poli v databázi.

    <StackPanel Orientation="Vertical" Grid.Row="0" Grid.Column="0">
        <Label Margin="20,5,5,0">List of Customers:</Label>
        <ListBox x:Name="listBox1" Height="200" Width="200" HorizontalAlignment="Left" 
           ItemTemplate="{StaticResource ListItemsTemplate}" IsSynchronizedWithCurrentItem="True" Margin="20,5,5,5"/>
    </StackPanel>
    
    <StackPanel Orientation="Vertical" Grid.Row="0" Grid.Column="2">
        <TextBox Margin="5,38,5,2" Width="200" Text="{Binding Path=ContactName}"/>
        <TextBox Margin="5,0,5,2" Width="200" Text="{Binding Path=CompanyName}"/>
        <TextBox Margin="5,0,5,2" Width="200" Text="{Binding Path=Phone}"/>
        <TextBox Margin="5,0,5,2" Width="200" Text="{Binding Path=Address}"/>
        <TextBox Margin="5,0,5,2" Width="200" Text="{Binding Path=City}"/>
        <TextBox Margin="5,0,5,2" Width="30" HorizontalAlignment="Left" Text="{Binding Path=Region}"/>
        <TextBox Margin="5,0,5,2" Width="50" HorizontalAlignment="Left" Text="{Binding Path=PostalCode}"/>
    </StackPanel>
    

Zobrazení dat pomocí spolupráce

Objednávky odpovídající vybranému zákazníkovi se zobrazí v ovládacím System.Windows.Forms.DataGridView prvku s názvem dataGridView1. Ovládací dataGridView1 prvek je vázán na zdroj dat v souboru kódu za kódem. Ovládací WindowsFormsHost prvek je nadřazený tento ovládací prvek model Windows Forms.

Zobrazení dat v ovládacím prvku DataGridView

  • Zkopírujte následující kód XAML do deklarace elementu Grid .

    <WindowsFormsHost Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Margin="20,5,5,5" Height="300">
        <wf:DataGridView x:Name="dataGridView1"/>
    </WindowsFormsHost>
    

Přidání zdroje dat do projektu

V sadě Visual Studio můžete do projektu snadno přidat zdroj dat. Tento postup přidá do projektu sadu dat silného typu. Přidá se také několik dalších tříd podpory, jako jsou adaptéry tabulek pro každou z vybraných tabulek.

Přidání zdroje dat

  1. V nabídce Data vyberte Přidat nový zdroj dat.

  2. V Průvodci konfigurací zdroje dat vytvořte připojení k databázi Northwind pomocí datové sady. Další informace naleznete v tématu Postupy: Připojení k datům v databázi.

  3. Po zobrazení výzvy Průvodce konfigurací zdroje dat uložte připojovací řetězec jako NorthwindConnectionString.

    Důležité

    Ukládání citlivých informací, například hesla, v rámci připojovací řetězec může ovlivnit zabezpečení vaší aplikace. Ověřování systému Windows, označované také jako integrované zabezpečení, je bezpečnější způsob řízení přístupu k databázi. Další informace naleznete v tématu Ochrana informací o připojení.

  4. Po zobrazení výzvy k výběru databázových objektů vyberte Customers objekty a Orders tabulky a pojmenujte vygenerovanou sadu NorthwindDataSetdat .

Vazba ke zdroji dat

Komponenta System.Windows.Forms.BindingSource poskytuje jednotné rozhraní pro zdroj dat aplikace. Vazba ke zdroji dat se implementuje v souboru kódu za kódem.

Vytvoření vazby ke zdroji dat

  1. Otevřete soubor kódu, který má název MainWindow.xaml.vb nebo MainWindow.xaml.cs.

  2. Do definice třídy zkopírujte následující kód MainWindow .

    Tento kód deklaruje komponentu BindingSource a přidružené pomocné třídy, které se připojují k databázi.

    private System.Windows.Forms.BindingSource nwBindingSource;
    private NorthwindDataSet nwDataSet;
    private NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter =
        new NorthwindDataSetTableAdapters.CustomersTableAdapter();
    private NorthwindDataSetTableAdapters.OrdersTableAdapter ordersTableAdapter =
        new NorthwindDataSetTableAdapters.OrdersTableAdapter();
    
    Private nwBindingSource As System.Windows.Forms.BindingSource
    Private nwDataSet As NorthwindDataSet
    Private customersTableAdapter As New NorthwindDataSetTableAdapters.CustomersTableAdapter()
    Private ordersTableAdapter As New NorthwindDataSetTableAdapters.OrdersTableAdapter()
    
  3. Zkopírujte následující kód do konstruktoru.

    Tento kód vytvoří a inicializuje komponentu BindingSource .

    public MainWindow()
    {
        InitializeComponent();
    
        // Create a DataSet for the Customers data.
        this.nwDataSet = new NorthwindDataSet();
        this.nwDataSet.DataSetName = "nwDataSet";
    
        // Create a BindingSource for the Customers data.
        this.nwBindingSource = new System.Windows.Forms.BindingSource();
        this.nwBindingSource.DataMember = "Customers";
        this.nwBindingSource.DataSource = this.nwDataSet;
    }
    
    Public Sub New()
        InitializeComponent()
    
        ' Create a DataSet for the Customers data.
        Me.nwDataSet = New NorthwindDataSet()
        Me.nwDataSet.DataSetName = "nwDataSet"
    
        ' Create a BindingSource for the Customers data.
        Me.nwBindingSource = New System.Windows.Forms.BindingSource()
        Me.nwBindingSource.DataMember = "Customers"
        Me.nwBindingSource.DataSource = Me.nwDataSet
    
    End Sub
    
  4. Otevřete MainWindow.xaml.

  5. V návrhovém zobrazení nebo v zobrazení XAML vyberte Window prvek.

  6. V okno Vlastnosti klikněte na kartu Události.

  7. Poklikejte na Loaded událost.

  8. Zkopírujte následující kód do obslužné rutiny Loaded události.

    Tento kód přiřadí komponentu BindingSource jako kontext dat a naplní objekty adaptéru CustomersOrders .

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        // Fill the Customers table adapter with data.
        this.customersTableAdapter.ClearBeforeFill = true;
        this.customersTableAdapter.Fill(this.nwDataSet.Customers);
    
        // Fill the Orders table adapter with data.
        this.ordersTableAdapter.Fill(this.nwDataSet.Orders);
    
        // Assign the BindingSource to
        // the data context of the main grid.
        this.mainGrid.DataContext = this.nwBindingSource;
    
        // Assign the BindingSource to
        // the data source of the list box.
        this.listBox1.ItemsSource = this.nwBindingSource;
    
        // Because this is a master/details form, the DataGridView
        // requires the foreign key relating the tables.
        this.dataGridView1.DataSource = this.nwBindingSource;
        this.dataGridView1.DataMember = "FK_Orders_Customers";
    
        // Handle the currency management aspect of the data models.
        // Attach an event handler to detect when the current item
        // changes via the WPF ListBox. This event handler synchronizes
        // the list collection with the BindingSource.
        //
    
        BindingListCollectionView cv = CollectionViewSource.GetDefaultView(
            this.nwBindingSource) as BindingListCollectionView;
    
        cv.CurrentChanged += new EventHandler(WPF_CurrentChanged);
    }
    
    Private Sub Window_Loaded( _
    ByVal sender As Object, _
    ByVal e As RoutedEventArgs)
    
        ' Fill the Customers table adapter with data.
        Me.customersTableAdapter.ClearBeforeFill = True
        Me.customersTableAdapter.Fill(Me.nwDataSet.Customers)
    
        ' Fill the Orders table adapter with data.
        Me.ordersTableAdapter.Fill(Me.nwDataSet.Orders)
    
        ' Assign the BindingSource to 
        ' the data context of the main grid.
        Me.mainGrid.DataContext = Me.nwBindingSource
    
        ' Assign the BindingSource to 
        ' the data source of the list box.
        Me.listBox1.ItemsSource = Me.nwBindingSource
    
        ' Because this is a master/details form, the DataGridView
        ' requires the foreign key relating the tables.
        Me.dataGridView1.DataSource = Me.nwBindingSource
        Me.dataGridView1.DataMember = "FK_Orders_Customers"
    
        ' Handle the currency management aspect of the data models.
        ' Attach an event handler to detect when the current item 
        ' changes via the WPF ListBox. This event handler synchronizes
        ' the list collection with the BindingSource.
        '
    
        Dim cv As BindingListCollectionView = _
            CollectionViewSource.GetDefaultView(Me.nwBindingSource)
    
        AddHandler cv.CurrentChanged, AddressOf WPF_CurrentChanged
    
    End Sub
    
  9. Do definice třídy zkopírujte následující kód MainWindow .

    Tato metoda zpracovává CurrentChanged událost a aktualizuje aktuální položku datové vazby.

    // This event handler updates the current item
    // of the data binding.
    void WPF_CurrentChanged(object sender, EventArgs e)
    {
        BindingListCollectionView cv = sender as BindingListCollectionView;
        this.nwBindingSource.Position = cv.CurrentPosition;
    }
    
    ' This event handler updates the current item 
    ' of the data binding.
    Private Sub WPF_CurrentChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim cv As BindingListCollectionView = sender
        Me.nwBindingSource.Position = cv.CurrentPosition
    End Sub
    
  10. Stiskněte F5, aby se aplikace sestavila a spustila.

Viz také