Partager via


Procédure pas à pas : connexion à des données dans des objets (Windows Forms)

Cette procédure pas à pas crée des objets permettant de contenir des données sur les clients et les commandes, avec une source de données Objet pour chaque objet. La source de données Objet apparaît dans la fenêtre Sources de données : les éléments sont déplacés par glissement de cette fenêtre vers un formulaire afin de créer des contrôles liés aux données dans les propriétés publiques de chaque 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'Configuration de source de données (Assistant) et en sélectionnant Objet comme type de source de données. Au terme de l'Assistant Configuration de source de données, les propriétés publiques de l'objet sont disponibles dans la Sources de données (fenêtre) et vous pouvez les faire glisser vers votre formulaire.

Cette procédure pas à pas décrit les tâches suivantes :

  • Création d'un projet Application Windows Forms.

  • Création d'objets personnalisés pour représenter des clients et des commandes.

  • Création et configuration d'une source de données Objet basée sur les objets personnalisés à 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 TableAdapters pour 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 un projet d'application Windows Forms

  1. Dans le menu Fichier, créez un Nouveau projet.

  2. Dans le volet Types de projets, sous le nœud correspondant à la langue que vous souhaitez utiliser, cliquez sur Windows.

  3. Dans le volet Modèles, cliquez sur Application Windows Forms.

  4. Dans la zone Nom, tapez ProcédureLiaisonObjets, puis cliquez sur OK.

    Le projet ProcédureLiaisonObjets est créé et ajouté à l'Explorateur de solutions.

Cette procédure pas à pas nécessite certains objets avec lesquels créer la liaison. La première étape consiste à créer des échantillons d'objets pour représenter les clients et les 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

  1. Dans le menu Projet, cliquez sur Ajouter une classe.

  2. Attribuez à la nouvelle classe le nom Customer et cliquez sur Ajouter.

  3. Remplacez le code contenu dans le fichier de classe Customer par le code suivant :

    Notes

    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

  1. Dans le menu Projet, sélectionnez Ajouter une classe.

  2. Attribuez à la nouvelle classe le nom Order et cliquez sur Ajouter.

  3. 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 Nullable(Of Integer),
                       ByVal orderDate As Nullable(Of DateTime),
                       ByVal requiredDate As Nullable(Of DateTime),
                       ByVal shippedDate As Nullable(Of DateTime),
                       ByVal shipVia As Nullable(Of Integer),
                       ByVal freight As Nullable(Of 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 Nullable(Of Integer)
        ''' <summary>
        ''' The ID of the employee who took this order
        ''' </summary>
        Public Property EmployeeID() As Nullable(Of Integer)
            Get
                Return employeeIDValue
            End Get
            Set(ByVal Value As Nullable(Of Integer))
                employeeIDValue = Value
            End Set
        End Property
    
    
        Private orderDateValue As Nullable(Of DateTime)
    
        ''' <summary>
        ''' The date this order was placed
        ''' </summary>
        Public Property OrderDate() As Nullable(Of DateTime)
            Get
                Return orderDateValue
            End Get
            Set(ByVal Value As Nullable(Of DateTime))
                orderDateValue = Value
            End Set
        End Property
    
        Private requiredDateValue As Nullable(Of DateTime)
        ''' <summary>
        ''' The date this order is required
        ''' </summary>
        Public Property RequiredDate() As Nullable(Of DateTime)
            Get
                Return requiredDateValue
            End Get
            Set(ByVal Value As Nullable(Of DateTime))
                requiredDateValue = Value
            End Set
        End Property
    
    
        Private shippedDateValue As Nullable(Of DateTime)
        ''' <summary>
        ''' The date this order was shipped
        ''' </summary>
        Public Property ShippedDate() As Nullable(Of DateTime)
            Get
                Return shippedDateValue
            End Get
            Set(ByVal Value As Nullable(Of DateTime))
                shippedDateValue = Value
            End Set
        End Property
    
        Private shipViaValue As Nullable(Of Integer)
        ''' <summary>
        ''' The shipping method for this order
        ''' </summary>
        Public Property ShipVia() As Nullable(Of Integer)
            Get
                Return shipViaValue
            End Get
            Set(ByVal Value As Nullable(Of Integer))
                shipViaValue = Value
            End Set
        End Property
    
    
        Private freightValue As Nullable(Of Decimal)
        ''' <summary>
        ''' The freight charge for this order
        ''' </summary>
        Public Property Freight() As Nullable(Of Decimal)
            Get
                Return freightValue
            End Get
            Set(ByVal Value As Nullable(Of 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,
               Nullable<int> employeeID, Nullable<DateTime> orderDate,
               Nullable<DateTime> requiredDate, Nullable<DateTime> shippedDate,
               Nullable<int> shipVia, Nullable<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 Nullable<int> employeeIDValue;
            /// <summary>
            /// The ID of the employee who took this order
            /// </summary>
            public Nullable<int> EmployeeID
            {
                get { return employeeIDValue; }
                set { employeeIDValue = value; }
            }
    
            private Nullable<DateTime> orderDateValue;
            /// <summary>
            /// The date this order was placed
            /// </summary>
            public Nullable<DateTime> OrderDate
            {
                get { return orderDateValue; }
                set { orderDateValue = value; }
            }
    
            private Nullable<DateTime> requiredDateValue;
            /// <summary>
            /// The date this order is required
            /// </summary>
            public Nullable<DateTime> RequiredDate
            {
                get { return requiredDateValue; }
                set { requiredDateValue = value; }
            }
    
            private Nullable<DateTime> shippedDateValue;
            /// <summary>
            /// The date this order was shipped
            /// </summary>
            public Nullable<DateTime> ShippedDate
            {
                get { return shippedDateValue; }
                set { shippedDateValue = value; }
            }
    
            private Nullable<int> shipViaValue;
            /// <summary>
            /// The shipping method of this order
            /// </summary>
            public Nullable<int> ShipVia
            {
                get { return shipViaValue; }
                set { shipViaValue = value; }
            }
    
            private Nullable<decimal> freightValue;
            /// <summary>
            /// The freight charge for this order
            /// </summary>
            public Nullable<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>
        {
    
        }
    }
    
  4. 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

  1. Générez votre projet.

    Notes

    Vous devez générer le projet avant de sélectionner les objets du projet dans l'Assistant Configuration de source de données.

  2. Ouvrez la fenêtre Sources de données en cliquant sur le menu Données et en sélectionnant Afficher les sources de données.

  3. Cliquez sur Ajouter une nouvelle source de données dans la fenêtre Sources de données.

    L'Assistant Configuration de source de données démarre.

  4. Sur la page Choisir un type de source de données, sélectionnez Objet, puis cliquez sur Suivant.

  5. Sur la page Sélectionner les objets de données, développez les nœuds ProcédureLiaisonObjets et activez la case à cocher en regard de l'objet Customer.

  6. 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

  1. Sélectionnez Form1 dans l'Explorateur de solutions et cliquez sur Concepteur de vues.

  2. Faites glisser le nœud Customer de la fenêtre Sources de données vers Form1.

  3. Développez le nœud Customer et faites glisser le nœud Orders de la fenêtre Sources de données vers 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'Configuration de source de données (Assistant).

Pour créer les TableAdapters

  1. Dans le menu Données, choisissez Ajouter une nouvelle source de données.

  2. Dans la page Choisir un type de source de données, sélectionnez Base de données, puis cliquez sur Suivant.

  3. Dans la page Choisir un modèle de base de données, sélectionnez Groupe de données, puis cliquez sur Suivant.

  4. Sur la page Choisir votre connexion de données, utilisez l'une des procédures 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 : établir une connexion à des données d'une base de données.

  5. Après avoir sélectionné une connexion de données, cliquez sur Suivant.

  6. Sur la page Enregistrer la chaîne de connexion dans le fichier de configuration de l'application, cliquez sur Suivant.

  7. Sur la page Choisir vos objets de base de données, développez le nœud Tables.

  8. 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

  1. Dans le menu Générer, sélectionnez Générer la solution.

  2. Faites glisser un NorthwindDataSet à partir de la Boîte à outils jusqu'à Form1.

  3. Faites glisser un CustomersTableAdapter à partir de la Boîte à outils jusqu'à Form1.

  4. 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, vous ne retournerez probablement jamais l'intégralité de la table de données. Dans le cadre de cette procédure pas à pas, nous retournerons les cinq meilleurs clients.

Notes

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

  1. Dans l'Explorateur de solutions, double-cliquez sur le fichier NorthwindDataSet.xsd.

    NorthwindDataset s'affiche dans le Concepteur de DataSet.

  2. Cliquez avec le bouton droit sur le CustomersTableAdapter et sélectionnez Ajouter une requête.

    La Configuration de requête TableAdapter (Assistant) s'ouvre.

  3. Conservez la valeur par défaut (Utiliser des instructions SQL), puis cliquez sur Suivant.

  4. Conservez la valeur par défaut (SELECT qui retourne des lignes) et cliquez sur Suivant.

  5. 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 
    
  6. Désactivez la case à cocher Remplir un DataTable.

  7. Nommez la méthode Retourner un DataTable GetTop5Customers 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 des commandes de la base de données, nous ne souhaitons pas renvoyer l'intégralité de la table ; nous souhaitons uniquement obtenir les commandes d'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

  1. Cliquez avec le bouton droit sur OrdersTableAdapter et choisissez Configurer.

    La Configuration de requête TableAdapter (Assistant) s'ouvre.

  2. 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
    
  3. Désactivez la case à cocher Remplir un DataTable.

  4. Nommez la méthode Retourner un DataTable GetDataByCustomerID et cliquez sur Terminer.

    La requête Fill principale du OrdersTableAdapter est remplacée par la requête GetDataByCustomerID.

  5. 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, exécutez les requêtes TableAdapter qui retournent de nouvelles tables de données (plutôt que d'utiliser les 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, en plus de remplir toutes les commandes dans chaque collection Customer.Orders. Remarquez comment chaque objet Customer est ajouté à la collection interne de CustomerBindingSource (CustomerBindingSource.Add(currentCustomer)). Le BindingSource fournit une collection intégrée fortement typée de Customers accessible via la propriété List.

Pour charger les objets avec des données

  1. Sélectionnez Form1 dans l'Explorateur de solutions et cliquez sur Afficher le code.

  2. 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

  1. Appuyez sur F5 pour exécuter l'application.

  2. Le formulaire s'ouvre et les contrôles DataGridView sont remplis avec les exemples de données.

  3. 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

Voir aussi

Concepts

Liaison de contrôles à des données dans Visual Studio

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

Modification des données dans votre application

Enregistrement des données

Procédures pas à pas relatives aux données