Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengikat sumber data ke kontrol sangat penting untuk memberi pengguna akses ke data yang mendasar, baik Anda menggunakan Formulir Windows atau WPF. Panduan ini menunjukkan bagaimana Anda dapat menggunakan pengikatan data dalam aplikasi hibrid yang mencakup kontrol Formulir Windows dan WPF.
Tugas yang diilustrasikan dalam panduan ini meliputi:
Membuat proyek.
Menentukan templat data.
Menentukan tata letak formulir.
Menentukan pengikatan data.
Menampilkan data dengan menggunakan interoperabilitas.
Menambahkan sumber data ke proyek.
Mengikat ke sumber data.
Untuk daftar kode lengkap tugas yang diilustrasikan dalam panduan ini, lihat Pengikatan Data dalam Sampel Aplikasi Hibrid.
Setelah selesai, Anda akan memiliki pemahaman tentang fitur pengikatan data dalam aplikasi hibrid.
Prasyarat
Anda memerlukan komponen berikut untuk menyelesaikan panduan ini:
Visual Studio.
Akses ke database sampel Northwind yang berjalan di Microsoft SQL Server.
Membuat Proyek
Untuk membuat dan menyiapkan proyek
Buat proyek Aplikasi WPF bernama
WPFWithWFAndDatabinding.Di Penjelajah Solusi, tambahkan referensi ke rakitan berikut.
WindowsFormsIntegration
System.Windows.Forms
Buka MainWindow.xaml di WPF Designer.
Window Dalam elemen , tambahkan pemetaan namespace Formulir Windows berikut.
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"Beri nama elemen Grid default
mainGriddengan menetapkan Name properti .<Grid x:Name="mainGrid">
Menentukan Templat Data
Daftar master pelanggan ditampilkan dalam ListBox kontrol. Contoh kode berikut mendefinisikan DataTemplate objek bernama ListItemsTemplate yang mengontrol pohon ListBox visual kontrol. Ini DataTemplate ditetapkan ke ListBox properti kontrol ItemTemplate .
Untuk menentukan templat data
Salin XAML berikut ke Grid dalam deklarasi elemen.
<Grid.Resources> <DataTemplate x:Key="ListItemsTemplate"> <TextBlock Text="{Binding Path=ContactName}"/> </DataTemplate> </Grid.Resources>
Menentukan Tata Letak Formulir
Tata letak formulir ditentukan oleh kisi dengan tiga baris dan tiga kolom. Label kontrol disediakan untuk mengidentifikasi setiap kolom dalam tabel Pelanggan.
Untuk menyiapkan tata letak Kisi
Salin XAML berikut ke Grid dalam deklarasi elemen.
<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>
Untuk menyiapkan kontrol Label
Salin XAML berikut ke Grid dalam deklarasi elemen.
<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>
Menentukan Pengikatan Data
Daftar master pelanggan ditampilkan dalam ListBox kontrol. Terlampir mengikat ListItemsTemplateTextBlock kontrol ke ContactName bidang dari database.
Detail setiap catatan pelanggan ditampilkan dalam beberapa TextBox kontrol.
Untuk menentukan pengikatan data
Salin XAML berikut ke Grid dalam deklarasi elemen.
Kelas Binding mengikat TextBox kontrol ke bidang yang sesuai dalam database.
<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>
Menampilkan Data dengan Menggunakan Interoperabilitas
Pesanan yang sesuai dengan pelanggan yang dipilih ditampilkan dalam System.Windows.Forms.DataGridView kontrol bernama dataGridView1. Kontrol dataGridView1 terikat ke sumber data dalam file code-behind.
WindowsFormsHost Kontrol adalah induk kontrol Formulir Windows ini.
Untuk menampilkan data dalam kontrol DataGridView
Salin XAML berikut ke Grid dalam deklarasi elemen.
<WindowsFormsHost Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Margin="20,5,5,5" Height="300"> <wf:DataGridView x:Name="dataGridView1"/> </WindowsFormsHost>
Menambahkan Sumber Data ke Proyek
Dengan Visual Studio, Anda dapat dengan mudah menambahkan sumber data ke proyek Anda. Prosedur ini menambahkan himpunan data yang sangat ditik ke proyek Anda. Beberapa kelas dukungan lainnya, seperti adaptor tabel untuk setiap tabel yang dipilih, juga ditambahkan.
Untuk menambahkan sumber data
Dari menu Data , pilih Tambahkan Sumber Data Baru.
Di Panduan Konfigurasi Sumber Data, buat koneksi ke database Northwind dengan menggunakan himpunan data. Untuk informasi selengkapnya, lihat Cara: Menyambungkan ke Data dalam Database.
Saat Anda diminta oleh Panduan Konfigurasi Sumber Data, simpan string koneksi sebagai
NorthwindConnectionString.Penting
Menyimpan informasi sensitif, seperti kata sandi, dalam string koneksi dapat memengaruhi keamanan aplikasi Anda. Menggunakan Autentikasi Windows, juga dikenal sebagai keamanan terintegrasi, adalah cara yang lebih aman untuk mengontrol akses ke database. Untuk informasi selengkapnya, lihat Melindungi Informasi Koneksi.
Saat Anda diminta untuk memilih objek database Anda, pilih
Customerstabel danOrders, dan beri nama himpunanNorthwindDataSetdata yang dihasilkan .
Pengikatan ke Sumber Data
Komponen ini System.Windows.Forms.BindingSource menyediakan antarmuka yang seragam untuk sumber data aplikasi. Pengikatan ke sumber data diimplementasikan dalam file code-behind.
Untuk mengikat ke sumber data
Buka file code-behind, yang diberi nama MainWindow.xaml.vb atau MainWindow.xaml.cs.
Salin kode berikut ke
MainWindowdalam definisi kelas.Kode ini mendeklarasikan BindingSource komponen dan kelas pembantu terkait yang tersambung ke database.
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()Salin kode berikut ke konstruktor.
Kode ini membuat dan menginisialisasi BindingSource komponen.
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 SubBuka MainWindow.xaml.
Dalam tampilan Desain atau tampilan XAML, pilih elemen Window.
Di jendela Properti, klik tab Peristiwa.
Klik dua kali acara Loaded.
Salin kode berikut ke dalam Loaded penanganan aktivitas.
Kode ini menetapkan BindingSource komponen sebagai konteks data dan mengisi
Customersobjek adaptor danOrders.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 SubSalin kode berikut ke
MainWindowdalam definisi kelas.Metode ini menangani CurrentChanged peristiwa dan memperbarui item pengikatan data saat ini.
// 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 SubTekan F5 untuk membangun dan menjalankan aplikasi.
Lihat juga
.NET Desktop feedback