Procédure pas à pas : connexion aux données dans des objets
Mise à jour : novembre 2007
Cette procédure pas à pas montre comment créer des objets pour gérer les données des clients et commandes, puis créer une source de données objet basée sur ces objets. La source de données objet s'affiche dans la fenêtre Sources de données depuis laquelle les éléments sont déplacés jusqu'à un formulaire afin de créer des contrôles liés aux données dans les propriétés publiques de l'objet. Cette procédure pas à pas montre également comment utiliser des TableAdapters pour extraire des données de la base de données et remplir les objets.
La source de données objet est créée en exécutant l'Assistant Configuration de source de données et en sélectionnant Objet comme type de source de données. Une fois l'Assistant Configuration de source de données terminé, vous pouvez faire glisser les propriétés publiques de l'objet depuis lafenêtre Sources de données jusqu'à votre formulaire.
![]() |
---|
Vous devez générer le projet contenant votre objet pour qu'il s'affiche dans l'Assistant Configuration de source de données. Si votre objet n'est pas mis à la disposition de l'Assistant, régénérez le projet contenant le ou les objets souhaités. |
Cette procédure pas à pas illustre les tâches suivantes :
Création d'un nouveau projet Application Windows.
Création d'exemples d'objets pour représenter des clients et des commandes.
Création et configuration dans votre application d'une source de données objet basée sur les exemples d'objets à l'aide de l'Assistant Configuration de source de données.
Ajout à un formulaire de contrôles liés aux données dans les objets personnalisés.
Création d'un groupe de données avec des TableAdapters afin de déplacer des données entre vos objets et la base de données.
Modification de la requête principale d'un TableAdapter.
Ajout de requêtes à un TableAdapter.
Remplissage de vos objets avec des données provenant de la base de données.
Création du projet
Pour créer le nouveau projet Application Windows
Dans le menu Fichier, créez un Nouveau projet.
Créez une Application Windows nommée ObjectBindingWalkthrough et cliquez sur OK. Pour plus d'informations, consultez Création d'applications Windows.
Le projet ObjectBindingWalkthrough est créé et ajouté à l'Explorateur de solutions.
Cette procédure pas à pas exige quelques objets auxquels effectuer la liaison, la première étape consiste donc à créer des exemples d'objets représentant des clients et des commandes. Pour représenter des clients, nous créerons un objet Customer représentant un client unique. Pour représenter les commandes, nous créerons un objet Order représentant une commande unique et un objet Orders représentant une collection d'objets Order. Pour la collection d'objets Customer, nous utiliserons la collection intégrée dans la classe BindingSource (comme expliqué à une étape ultérieure de cette procédure).
Création de l'objet Customer
Pour créer l'objet Customer
Dans le menu Projet, cliquez sur Ajouter une classe.
Attribuez à la nouvelle classe le nom Customer et cliquez sur Ajouter.
Remplacez le code contenu dans le fichier de classe Customer par le code suivant :
Remarque :
L'objet Customer contient une propriété ordersCollection de type Orders. L'éditeur affichera un message indiquant Type 'Orders' non défini. Ce message est attendu et disparaîtra lorsque vous créerez les classes Order et Orders dans la section suivante.
''' <summary> ''' A single customer ''' </summary> Public Class Customer Public Sub New() End Sub ''' <summary> ''' Creates a new customer ''' </summary> ''' <param name="customerId">The ID that uniquely identifies this customer</param> ''' <param name="companyName">The name for this customer</param> ''' <param name="contactName">The name for this customer's contact</param> ''' <param name="contactTitle">The title for this contact</param> ''' <param name="address">The address for this customer</param> ''' <param name="city">The city for this customer</param> ''' <param name="region">The region for this customer</param> ''' <param name="postalCode">The postal code for this customer</param> ''' <param name="country">The country for this customer</param> ''' <param name="phone">The phone number for this customer</param> ''' <param name="fax">The fax number for this customer</param> Public Sub New(ByVal customerId As String, _ ByVal companyName As String, _ ByVal contactName As String, _ ByVal contactTitle As String, _ ByVal address As String, _ ByVal city As String, _ ByVal region As String, _ ByVal postalCode As String, _ ByVal country As String, _ ByVal phone As String, _ ByVal fax As String) customerIDValue = customerId companyNameValue = companyName contactNameValue = contactName contactTitleValue = contactTitle addressValue = address cityValue = city regionValue = region postalCodeValue = postalCode countryValue = country phoneValue = phone faxValue = fax End Sub Private customerIDValue As String ''' <summary> ''' The ID that uniquely identifies this customer ''' </summary> Public Property CustomerID() As String Get Return customerIDValue End Get Set(ByVal value As String) customerIDValue = value End Set End Property Private companyNameValue As String ''' <summary> ''' The name for this customer ''' </summary> Public Property CompanyName() As String Get Return companyNameValue End Get Set(ByVal Value As String) companyNameValue = Value End Set End Property Private contactNameValue As String ''' <summary> ''' The name for this customer's contact ''' </summary> Public Property ContactName() As String Get Return contactNameValue End Get Set(ByVal Value As String) contactNameValue = Value End Set End Property Private contactTitleValue As String ''' <summary> ''' The title for this contact ''' </summary> Public Property ContactTitle() As String Get Return contactTitleValue End Get Set(ByVal Value As String) contactTitleValue = Value End Set End Property Private addressValue As String ''' <summary> ''' The address for this customer ''' </summary> Public Property Address() As String Get Return addressValue End Get Set(ByVal Value As String) addressValue = Value End Set End Property Private cityValue As String ''' <summary> ''' The city for this customer ''' </summary> Public Property City() As String Get Return cityValue End Get Set(ByVal Value As String) cityValue = Value End Set End Property Private regionValue As String ''' <summary> ''' The region for this customer ''' </summary> Public Property Region() As String Get Return regionValue End Get Set(ByVal Value As String) regionValue = Value End Set End Property Private postalCodeValue As String ''' <summary> ''' The postal code for this customer ''' </summary> Public Property PostalCode() As String Get Return postalCodeValue End Get Set(ByVal Value As String) postalCodeValue = Value End Set End Property Private countryValue As String ''' <summary> ''' The country for this customer ''' </summary> Public Property Country() As String Get Return countryValue End Get Set(ByVal Value As String) countryValue = Value End Set End Property Private phoneValue As String ''' <summary> ''' The phone number for this customer ''' </summary> Public Property Phone() As String Get Return phoneValue End Get Set(ByVal Value As String) phoneValue = Value End Set End Property Private faxValue As String ''' <summary> ''' The fax number for this customer ''' </summary> Public Property Fax() As String Get Return faxValue End Get Set(ByVal Value As String) faxValue = Value End Set End Property Private ordersCollection As New System.ComponentModel.BindingList(Of Order) ''' <summary> ''' The orders for this customer ''' </summary> Public Property Orders() As System.ComponentModel.BindingList(Of Order) Get Return ordersCollection End Get Set(ByVal value As System.ComponentModel.BindingList(Of Order)) ordersCollection = value End Set End Property Public Overrides Function ToString() As String Return Me.CompanyName & " (" & Me.CustomerID & ")" End Function End Class
namespace ObjectBindingWalkthrough { /// <summary> /// A single customer /// </summary> public class Customer { /// <summary> /// Creates a new customer /// </summary> public Customer() { } /// <summary> /// Creates a new customer /// </summary> /// <param name="customerID"></param> /// <param name="companyName"></param> /// <param name="contactName"></param> /// <param name="contactTitle"></param> /// <param name="address"></param> /// <param name="city"></param> /// <param name="region"></param> /// <param name="postalCode"></param> /// <param name="country"></param> /// <param name="phone"></param> /// <param name="fax"></param> public Customer(string customerID, string companyName, string contactName, string contactTitle, string address, string city, string region, string postalCode, string country, string phone, string fax) { customerIDValue = customerID; } private string customerIDValue; /// <summary> /// The ID that uniquely identifies this customer /// </summary> public string CustomerID { get { return customerIDValue; } set { customerIDValue = value; } } private string companyNameValue; /// <summary> /// The name for this customer /// </summary> public string CompanyName { get { return companyNameValue; } set { companyNameValue = value; } } private string contactNameValue; /// <summary> /// The name for this customer's contact /// </summary> public string ContactName { get { return contactNameValue; } set { contactNameValue = value; } } private string contactTitleValue; /// <summary> /// The title for this contact /// </summary> public string ContactTitle { get { return contactTitleValue; } set { contactTitleValue = value; } } private string addressValue; /// <summary> /// The address for this customer /// </summary> public string Address { get { return addressValue; } set { addressValue = value; } } private string cityValue; /// <summary> /// The city for this customer /// </summary> public string City { get { return cityValue; } set { cityValue = value; } } private string regionValue; /// <summary> /// The region for this customer /// </summary> public string Region { get { return regionValue; } set { regionValue = value; } } private string postalCodeValue; /// <summary> /// The postal code for this customer /// </summary> public string PostalCode { get { return postalCodeValue; } set { postalCodeValue = value; } } private string countryValue; /// <summary> /// The country for this customer /// </summary> public string Country { get { return countryValue; } set { countryValue = value; } } private string phoneValue; /// <summary> /// The phone number for this customer /// </summary> public string Phone { get { return phoneValue; } set { phoneValue = value; } } private string faxValue; /// <summary> /// The fax number for this customer /// </summary> public string Fax { get { return faxValue; } set { faxValue = value; } } private System.ComponentModel.BindingList<Order> ordersCollection = new System.ComponentModel.BindingList<Order>(); public System.ComponentModel.BindingList<Order> Orders { get { return ordersCollection; } set { ordersCollection = value; } } public override string ToString() { return this.CompanyName + " (" + this.CustomerID + ")"; } } }
Création des objets Order
Pour créer l'objet Order et la collection Orders
Dans le menu Projet, sélectionnez Ajouter une classe.
Attribuez à la nouvelle classe le nom Order et cliquez sur Ajouter.
Remplacez le code contenu dans le fichier de classe Order par le code suivant :
''' <summary> ''' A single order ''' </summary> Public Class Order Public Sub New() End Sub ''' <summary> ''' Creates a new order ''' </summary> ''' <param name="orderid">The identifier for this order</param> ''' <param name="customerID">The customer who placed this order</param> ''' <param name="employeeID">The ID of the employee who took this order</param> ''' <param name="orderDate">The date this order was placed</param> ''' <param name="requiredDate">The date this order is required</param> ''' <param name="shippedDate">The date the order was shipped</param> ''' <param name="shipVia">The shipping method for this order</param> ''' <param name="freight">The freight charge for this order</param> ''' <param name="shipName">The name of the recipient for this order</param> ''' <param name="shipAddress">The address to ship this order to</param> ''' <param name="shipCity">The city to ship this order to</param> ''' <param name="shipRegion">The region to ship this order to</param> ''' <param name="shipPostalCode">The postal code to ship this order to</param> ''' <param name="shipCountry">The country to ship this order to</param> Public Sub New(ByVal orderid As Integer, _ ByVal customerID As String, _ ByVal employeeID As Integer, _ ByVal orderDate As DateTime, _ ByVal requiredDate As DateTime, _ ByVal shippedDate As DateTime, _ ByVal shipVia As Integer, _ ByVal freight As Decimal, _ ByVal shipName As String, _ ByVal shipAddress As String, _ ByVal shipCity As String, _ ByVal shipRegion As String, _ ByVal shipPostalCode As String, _ ByVal shipCountry As String) orderIDValue = orderid customerIDValue = customerID employeeIDValue = employeeID orderDateValue = orderDate requiredDateValue = requiredDate shippedDateValue = shippedDate shipViaValue = shipVia freightValue = freight shipAddressValue = shipAddress shipCityValue = shipCity shipRegionValue = shipRegion shipPostalCodeValue = shipPostalCode shipCountryValue = shipCountry End Sub Private orderIDValue As Integer ''' <summary> ''' Identifier for this order ''' </summary> Public Property OrderID() As Integer Get Return orderIDValue End Get Set(ByVal value As Integer) orderIDValue = value End Set End Property Private customerIDValue As String ''' <summary> ''' The customer who placed this order ''' </summary> Public Property CustomerID() As String Get Return customerIDValue End Get Set(ByVal Value As String) customerIDValue = Value End Set End Property Private employeeIDValue As Integer ''' <summary> ''' The ID of the employee who took this order ''' </summary> Public Property EmployeeID() As Integer Get Return employeeIDValue End Get Set(ByVal Value As Integer) employeeIDValue = Value End Set End Property Private orderDateValue As DateTime ''' <summary> ''' The date this order was placed ''' </summary> Public Property OrderDate() As DateTime Get Return orderDateValue End Get Set(ByVal Value As DateTime) orderDateValue = Value End Set End Property Private requiredDateValue As DateTime ''' <summary> ''' The date this order is required ''' </summary> Public Property RequiredDate() As DateTime Get Return requiredDateValue End Get Set(ByVal Value As DateTime) requiredDateValue = Value End Set End Property Private shippedDateValue As DateTime ''' <summary> ''' The date this order was shipped ''' </summary> Public Property ShippedDate() As DateTime Get Return shippedDateValue End Get Set(ByVal Value As DateTime) shippedDateValue = Value End Set End Property Private shipViaValue As Integer ''' <summary> ''' The shipping method for this order ''' </summary> Public Property ShipVia() As Integer Get Return shipViaValue End Get Set(ByVal Value As Integer) shipViaValue = Value End Set End Property Private freightValue As Decimal ''' <summary> ''' The freight charge for this order ''' </summary> Public Property Freight() As Decimal Get Return freightValue End Get Set(ByVal Value As Decimal) freightValue = Value End Set End Property Private shipNameValue As String ''' <summary> ''' The name of the recipient for this order ''' </summary> Public Property ShipName() As String Get Return shipNameValue End Get Set(ByVal Value As String) shipNameValue = Value End Set End Property Private shipAddressValue As String ''' <summary> ''' The address to ship this order to ''' </summary> Public Property ShipAddress() As String Get Return shipAddressValue End Get Set(ByVal Value As String) shipAddressValue = Value End Set End Property Private shipCityValue As String ''' <summary> ''' The city to ship this order to ''' </summary> Public Property ShipCity() As String Get Return shipCityValue End Get Set(ByVal Value As String) shipCityValue = Value End Set End Property Private shipRegionValue As String ''' <summary> ''' The region to ship this order to ''' </summary> Public Property ShipRegion() As String Get Return shipRegionValue End Get Set(ByVal Value As String) shipRegionValue = Value End Set End Property Private shipPostalCodeValue As String ''' <summary> ''' The postal code to ship this order to ''' </summary> Public Property ShipPostalCode() As String Get Return shipPostalCodeValue End Get Set(ByVal Value As String) shipPostalCodeValue = Value End Set End Property Private shipCountryValue As String ''' <summary> ''' The country to ship this order to ''' </summary> Public Property ShipCountry() As String Get Return shipCountryValue End Get Set(ByVal Value As String) shipCountryValue = Value End Set End Property Private customerValue As Customer ''' <summary> ''' The customer this order belongs to ''' </summary> Public Property Customer() As Customer Get Return customerValue End Get Set(ByVal Value As Customer) customerValue = Value End Set End Property End Class ''' <summary> ''' A collection of Orders ''' </summary> Public Class Orders Inherits System.ComponentModel.BindingList(Of Order) End Class
using System; namespace ObjectBindingWalkthrough { /// <summary> /// A single order /// </summary> public class Order { /// <summary> /// Creates a new order /// </summary> public Order() { } /// <summary> /// Creates a new order /// </summary> /// <param name="orderid"></param> /// <param name="customerID"></param> /// <param name="employeeID"></param> /// <param name="orderDate"></param> /// <param name="requiredDate"></param> /// <param name="shippedDate"></param> /// <param name="shipVia"></param> /// <param name="freight"></param> /// <param name="shipName"></param> /// <param name="shipAddress"></param> /// <param name="shipCity"></param> /// <param name="shipRegion"></param> /// <param name="shipPostalCode"></param> /// <param name="shipCountry"></param> public Order(int orderid, string customerID, int employeeID, DateTime orderDate, DateTime requiredDate, DateTime shippedDate, int shipVia, decimal freight, string shipName, string shipAddress, string shipCity, string shipRegion, string shipPostalCode, string shipCountry) { } private int orderIDValue; /// <summary> /// The ID that uniquely identifies this order /// </summary> public int OrderID { get { return orderIDValue; } set { orderIDValue = value; } } private string customerIDValue; /// <summary> /// The customer who placed this order /// </summary> public string CustomerID { get { return customerIDValue; } set { customerIDValue = value; } } private int employeeIDValue; /// <summary> /// The ID of the employee who took this order /// </summary> public int EmployeeID { get { return employeeIDValue; } set { employeeIDValue = value; } } private DateTime orderDateValue; /// <summary> /// The date this order was placed /// </summary> public DateTime OrderDate { get { return orderDateValue; } set { orderDateValue = value; } } private DateTime requiredDateValue; /// <summary> /// The date this order is required /// </summary> public DateTime RequiredDate { get { return requiredDateValue; } set { requiredDateValue = value; } } private DateTime shippedDateValue; /// <summary> /// The date this order was shipped /// </summary> public DateTime ShippedDate { get { return shippedDateValue; } set { shippedDateValue = value; } } private int shipViaValue; /// <summary> /// The shipping method of this order /// </summary> public int ShipVia { get { return shipViaValue; } set { shipViaValue = value; } } private decimal freightValue; /// <summary> /// The freight charge for this order /// </summary> public decimal Freight { get { return freightValue; } set { freightValue = value; } } private string shipNameValue; /// <summary> /// The name of the recipient for this order /// </summary> public string ShipName { get { return shipNameValue; } set { shipNameValue = value; } } private string shipAddressValue; /// <summary> /// The address to ship this order to /// </summary> public string ShipAddress { get { return shipAddressValue; } set { shipAddressValue = value; } } private string shipCityValue; /// <summary> /// The city to ship this order to /// </summary> public string ShipCity { get { return shipCityValue; } set { shipCityValue = value; } } private string shipRegionValue; /// <summary> /// The region to ship this order to /// </summary> public string ShipRegion { get { return shipRegionValue; } set { shipRegionValue = value; } } private string shipPostalCodeValue; /// <summary> /// The postal code to ship this order to /// </summary> public string ShipPostalCode { get { return shipPostalCodeValue; } set { shipPostalCodeValue = value; } } private string shipCountryValue; /// <summary> /// The country to ship this order to /// </summary> public string ShipCountry { get { return shipCountryValue; } set { shipCountryValue = value; } } } /// <summary> /// A collection of Order objects /// </summary> class Orders: System.ComponentModel.BindingList<Order> { } }
Dans le menu Fichier, choisissez Enregistrer tout.
Création de la source de données objet
Vous pouvez créer une source de données basée sur les objets créés à l'étape précédente en exécutant l'Assistant Configuration de source de données.
Pour créer la source de données objet
Ouvrez la fenêtre Sources de données en cliquant sur le menu données et en choisissant Afficher les sources de données.
Cliquez sur Ajouter une nouvelle source de données dans la fenêtre Sources de données.
Sélectionnez Objet dans la page Choisir un type de source de données, puis cliquez sur Suivant.
Développez les nœuds ObjectBindingWalkthrough et sélectionnez l'objet Customer.
Remarque :
Si l'objet Customer n'est pas disponible, cliquez sur Annuler, puis sélectionnez Générer ObjectBindingWalkthrough dans le menu Générer. Une fois le projet correctement généré, redémarrez l'Assistant (étape 2) et les objets personnalisés apparaîtront.
Cliquez sur Terminer.
L'objet Customer s'affiche dans la fenêtre Sources de données.
Création d'un formulaire lié aux données
Les contrôles liés à l'objet Customer sont créés en faisant glisser des éléments depuis la fenêtre Sources de données jusqu'à un formulaire.
Pour créer un formulaire avec des contrôles liés aux propriétés d'objet
Sélectionnez Form1 dans l'Explorateur de solutions et cliquez sur Concepteur de vues.
Faites glisser le nœud Customer depuis la fenêtre Sources de données jusqu'à Form1.
Développez le nœud Customer et faites glisser le nœud Orders depuis la fenêtre Sources de données jusqu'à Form1.
Création de TableAdapters pour charger des données à partir de la base de données dans les objets personnalisés
Pour déplacer des données entre les objets et la base de données, nous utiliserons des TableAdapters. Vous pouvez créer des TableAdapters pour les tables Customers et Orders à l'aide de l'Assistant Configuration de source de données.
Pour créer les TableAdapters
Dans le menu Données, choisissez Ajouter une nouvelle source de données.
Sélectionnez Base de données dans la page Choisir un type de source de données.
Sur la page Choisir votre connexion de données, effectuez l'une des opérations suivantes :
Si une connexion de données à l'exemple de base de données Northwind est disponible dans la liste déroulante, sélectionnez-la.
- ou -
Sélectionnez Nouvelle connexion pour configurer une nouvelle connexion de données à la base de données Northwind. Pour plus d'informations, consultez Comment : créer des connexions à des bases de données SQL Server ou Comment : créer des connexions à des bases de données Access.
Cliquez sur Suivant dans la page Enregistrer la chaîne de connexion dans le fichier de configuration de l'application.
Développez le nœud Tables dans la page Choisir vos objets de base de données.
Sélectionnez les tables Customers et Orders, puis cliquez sur Terminer.
NorthwindDataSet est ajouté à votre projet et les tables Customers et Orders apparaissent dans la fenêtre Sources de données, sous le nœud NorthwindDataSet.
Ajout du groupe de données et des TableAdapters à Form1
Vous pouvez ajouter des instances de CustomersTableAdapter, OrdersTableAdapter et NorthwindDataSet au formulaire en faisant glisser leurs composants représentatifs à partir de la Boîte à outils.
Pour remplir les objets Customer avec des données provenant de la table Customers
Dans le menu Générer, cliquez sur Générer la solution.
Faites glisser un NorthwindDataSet à partir de la Boîte à outils jusqu'à Form1.
Faites glisser un CustomersTableAdapter à partir de la Boîte à outils jusqu'à Form1.
Faites glisser un OrdersTableAdapter à partir de la Boîte à outils jusqu'à Form1.
Ajout d'une requête au CustomersTableAdapter pour retourner uniquement quelques clients
Dans les applications réelles, il est probable que vous ne retournerez jamais une table de données entière. Dans le cadre de cette procédure pas à pas, nous retournerons les cinq meilleurs clients.
![]() |
---|
Normalement, vous passez un paramètre permettant de sélectionner les clients que vous souhaitez retourner, mais pour assurer la concision de cette procédure pas à pas, nous allons coder en dur la requête pour ne retourner que cinq clients et éviter d'avoir à créer une interface utilisateur pour entrer des valeurs de paramètre. |
Pour ajouter une requête supplémentaire au CustomersTableAdapter
Dans l'Explorateur de solutions, double-cliquez sur le fichier NorthwindDataSet.xsd.
NorthwindDataset s'affiche dans le Concepteur de DataSet.
Cliquez avec le bouton droit sur le CustomersTableAdapter et sélectionnez Ajouter une requête.
Conservez la valeur par défaut (Utiliser des instructions SQL), puis cliquez sur Suivant.
Conservez la valeur par défaut (SELECT qui retourne des lignes) et cliquez sur Suivant.
Remplacez l'instruction SQL par la suivante et cliquez sur Suivant :
SELECT Top 5 CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax FROM Customers
Désactivez la case à cocher Remplir un DataTable.
Nommez la méthode Retourner un DataTableGetTop5Customers et cliquez sur Terminer.
La requête GetTop5Customers est ajoutée au CustomersTableAdapter.
Modification de la requête sur OrdersTableAdapter pour ne retourner que les commandes relatives au client souhaité
Lors de l'extraction de commandes de la base de données, nous ne souhaitons pas retourner l'intégralité de la table de commandes ; nous souhaitons uniquement les commandes relatives à un client spécifique. La procédure suivante décrit de façon détaillée comment reconfigurer un TableAdapter avec une nouvelle requête (en ajoutant une requête supplémentaire, comme nous l'avons fait à l'étape précédente pour le CustomersTableAdapter).
Pour reconfigurer la requête principale du TableAdapter afin de retourner les commandes d'un seul client
Cliquez avec le bouton droit sur OrdersTableAdapter et choisissez Configurer.
Remplacez l'instruction SQL par la suivante et cliquez sur Suivant :
SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate, ShippedDate, ShipVia, Freight, ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry FROM Orders WHERE CustomerID = @CustomerID
Désactivez la case à cocher Remplir un DataTable.
Nommez la méthode Retourner un DataTableGetDataByCustomerID et cliquez sur Terminer.
La requête Fill principale du OrdersTableAdapter est remplacée par la requête GetDataByCustomerID.
Générez le projet en sélectionnant Générer la solution dans le menu Générer.
Ajout de code pour charger des données dans les objets Customer et Order
Pour charger des données dans nos objets personnalisés, vous devez exécuter les requêtes TableAdapter qui retournent de nouvelles tables de données (par opposition aux requêtes TableAdapter qui remplissent des tables de données existantes). Le code parcourt ensuite la table et remplit chaque objet Customer avec les informations client, puis remplit toutes les commandes de chaque collection Customer.Orders. Remarquez de quelle manière chaque objet Customer est ajouté à la collection interne de CustomerBindingSource (CustomerBindingSource.Add(currentCustomer)) ; c'est-à-dire que BindingSource fournit une collection de Customers fortement typée intégrée accessible par la propriété List.
Pour charger les objets avec des données
Sélectionnez Form1 dans l'Explorateur de solutions et cliquez sur Afficher le code.
Remplacez le code de Form1 par celui-ci :
Public Class Form1 Private Sub LoadCustomers() Dim customerData As NorthwindDataSet.CustomersDataTable = _ CustomersTableAdapter1.GetTop5Customers() Dim customerRow As NorthwindDataSet.CustomersRow For Each customerRow In customerData Dim currentCustomer As New Customer() With currentCustomer .CustomerID = customerRow.CustomerID .CompanyName = customerRow.CompanyName If Not customerRow.IsAddressNull Then .Address = customerRow.Address End If If Not customerRow.IsCityNull Then .City = customerRow.City End If If Not customerRow.IsContactNameNull Then .ContactName = customerRow.ContactName End If If Not customerRow.IsContactTitleNull Then .ContactTitle = customerRow.ContactTitle End If If Not customerRow.IsCountryNull Then .Country = customerRow.Country End If If Not customerRow.IsFaxNull Then .Fax = customerRow.Fax End If If Not customerRow.IsPhoneNull Then .Phone = customerRow.Phone End If If Not customerRow.IsPostalCodeNull Then .PostalCode = customerRow.PostalCode End If If Not customerRow.Is_RegionNull Then .Region = customerRow._Region End If End With LoadOrders(currentCustomer) CustomerBindingSource.Add(currentCustomer) Next End Sub Private Sub LoadOrders(ByRef currentCustomer As Customer) Dim orderData As NorthwindDataSet.OrdersDataTable = _ OrdersTableAdapter1.GetDataByCustomerID(currentCustomer.CustomerID) Dim orderRow As NorthwindDataSet.OrdersRow For Each orderRow In orderData Dim currentOrder As New Order() With currentOrder .OrderID = orderRow.OrderID .Customer = currentCustomer If Not orderRow.IsCustomerIDNull Then .CustomerID = orderRow.CustomerID End If If Not orderRow.IsEmployeeIDNull Then .EmployeeID = orderRow.EmployeeID End If If Not orderRow.IsFreightNull Then .Freight = orderRow.Freight End If If Not orderRow.IsOrderDateNull Then .OrderDate = orderRow.OrderDate End If If Not orderRow.IsRequiredDateNull Then .RequiredDate = orderRow.RequiredDate End If If Not orderRow.IsShipAddressNull Then .ShipAddress = orderRow.ShipAddress End If If Not orderRow.IsShipCityNull Then .ShipCity = orderRow.ShipCity End If If Not orderRow.IsShipCountryNull Then .ShipCountry = orderRow.ShipCountry End If If Not orderRow.IsShipNameNull Then .ShipName = orderRow.ShipName End If If Not orderRow.IsShippedDateNull Then .ShippedDate = orderRow.ShippedDate End If If Not orderRow.IsShipPostalCodeNull Then .ShipPostalCode = orderRow.ShipPostalCode End If If Not orderRow.IsShipRegionNull Then .ShipRegion = orderRow.ShipRegion End If If Not orderRow.IsShipViaNull Then .ShipVia = orderRow.ShipVia End If End With currentCustomer.Orders.Add(currentOrder) Next End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load LoadCustomers() End Sub End Class
using System; using System.Windows.Forms; namespace ObjectBindingWalkthrough { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Load += Form1_Load; } private void LoadCustomers() { NorthwindDataSet.CustomersDataTable customerData = customersTableAdapter1.GetTop5Customers(); foreach (NorthwindDataSet.CustomersRow customerRow in customerData) { Customer currentCustomer = new Customer(); currentCustomer.CustomerID = customerRow.CustomerID; currentCustomer.CompanyName = customerRow.CompanyName; if (customerRow.IsAddressNull() == false) { currentCustomer.Address = customerRow.Address; } if (customerRow.IsCityNull() == false) { currentCustomer.City = customerRow.City; } if (customerRow.IsContactNameNull() == false) { currentCustomer.ContactName = customerRow.ContactName; } if (customerRow.IsContactTitleNull() == false) { currentCustomer.ContactTitle = customerRow.ContactTitle; } if (customerRow.IsCountryNull() == false) { currentCustomer.Country = customerRow.Country; } if (customerRow.IsFaxNull() == false) { currentCustomer.Fax = customerRow.Fax; } if (customerRow.IsPhoneNull() == false) { currentCustomer.Phone = customerRow.Phone; } if (customerRow.IsPostalCodeNull() == false) { currentCustomer.PostalCode = customerRow.PostalCode; } if (customerRow.IsRegionNull() == false) { currentCustomer.Region = customerRow.Region; } LoadOrders(currentCustomer); customerBindingSource.Add(currentCustomer); } } private void LoadOrders(Customer currentCustomer) { NorthwindDataSet.OrdersDataTable orderData = ordersTableAdapter1.GetDataByCustomerID(currentCustomer.CustomerID); foreach (NorthwindDataSet.OrdersRow orderRow in orderData) { Order currentOrder = new Order(); currentOrder.OrderID = orderRow.OrderID; if (orderRow.IsCustomerIDNull() == false) { currentOrder.CustomerID = orderRow.CustomerID; } if (orderRow.IsEmployeeIDNull() == false) { currentOrder.EmployeeID = orderRow.EmployeeID; } if (orderRow.IsFreightNull() == false) { currentOrder.Freight = orderRow.Freight; } if (orderRow.IsOrderDateNull() == false) { currentOrder.OrderDate = orderRow.OrderDate; } if (orderRow.IsRequiredDateNull() == false) { currentOrder.RequiredDate = orderRow.RequiredDate; } if (orderRow.IsShipAddressNull() == false) { currentOrder.ShipAddress = orderRow.ShipAddress; } if (orderRow.IsShipCityNull() == false) { currentOrder.ShipCity = orderRow.ShipCity; } if (orderRow.IsShipCountryNull() == false) { currentOrder.ShipCountry = orderRow.ShipCountry; } if (orderRow.IsShipNameNull() == false) { currentOrder.ShipName = orderRow.ShipName; } if (orderRow.IsShippedDateNull() == false) { currentOrder.ShippedDate = orderRow.ShippedDate; } if (orderRow.IsShipPostalCodeNull() == false) { currentOrder.ShipPostalCode = orderRow.ShipPostalCode; } if (orderRow.IsShipRegionNull() == false) { currentOrder.ShipRegion = orderRow.ShipRegion; } if (orderRow.IsShipViaNull() == false) { currentOrder.ShipVia = orderRow.ShipVia; } currentCustomer.Orders.Add(currentOrder); } } private void Form1_Load(object sender, EventArgs e) { LoadCustomers(); } } }
Test de l'application
Pour tester l'application
Appuyez sur F5 pour exécuter l'application.
Le formulaire s'ouvre et les contrôles DataGridView sont remplis avec les exemples de données.
Parcourez les clients contenus dans le DataGridView pour afficher les commandes qui leur sont associées.
Étapes suivantes
Pour ajouter des fonctionnalités à votre application
Ajoutez du code pour renvoyer des données des objets personnalisés à la base de données. Pour plus d'informations, consultez Comment : accéder directement à la base de données avec un TableAdapter.
Réorganisez les colonnes dans le DataGridView en sélectionnant Modifier les colonnes sur la balise active DataGridView.
Voir aussi
Concepts
Liaison d'objets dans Visual Studio
Autres ressources
Connexion aux données dans Visual Studio
Préparation de votre application pour recevoir des données
Extraction de données dans votre application
Affichage des données sur des formulaires dans les applications Windows