Exemplarische Vorgehensweise: Herstellen einer Verbindung mit Daten in Objekten (Windows Forms)

In dieser exemplarischen Vorgehensweise werden Objekte für Kunden- und Bestelldaten sowie Objektdatenquellen für jedes Objekt erstellt. Die Objektdatenquelle wird im Datenquellenfenster angezeigt. Von diesem Fenster aus können Elemente in ein Formular gezogen werden, um Steuerelemente zu erstellen, die an Daten in den öffentlichen Eigenschaften für jedes Objekt gebunden sind. Die exemplarische Vorgehensweise veranschaulicht außerdem die Verwendung von TableAdapters zum Erfassen von Daten aus der Datenbank und zum Auffüllen der Objekte.

Die Objektdatenquelle wird erstellt, in dem der Assistent zum Konfigurieren von Datenquellen ausgeführt und Objekt als Typ der Datenquelle ausgewählt wird. Sobald Sie den Assistent zum Konfigurieren von Datenquellen ausgeführt haben, stehen die öffentlichen Eigenschaften des Objekts im Datenquellenfenster zur Verfügung und können auf das Formular gezogen werden.

In dieser exemplarischen Vorgehensweise werden u. a. die folgenden Aufgaben beschrieben:

  • Erstellen eines neuen Projekts vom Typ Windows Forms-Anwendung.

  • Erstellen von benutzerdefinierten Objekten zur Darstellung von Kunden und Bestellungen.

  • Erstellen und Konfigurieren einer Objektdatenquelle auf Grundlage der benutzerdefinierten Objekte unter Verwendung des Assistenten zum Konfigurieren von Datenquellen.

  • Hinzufügen von Steuerelementen zu einem Formular, die an die Daten in den benutzerdefinierten Objekten gebunden sind.

  • Erstellen eines Datasets mit TableAdapters, um Daten zwischen den Objekten und der Datenbank zu verschieben.

  • Bearbeiten der Hauptabfrage eines TableAdapter.

  • Hinzufügen von Abfragen zu einem TableAdapter.

  • Auffüllen der Objekte mit Daten aus der Datenbank.

Erstellen des Projekts

So erstellen Sie ein Windows Forms-Anwendungsprojekt

  1. Klicken Sie im Menü Datei auf Neues Projekt.

  2. Klicken Sie im Bereich Projekttypen unter dem Knoten für die Sprache, die Sie verwenden möchten, auf die Option Windows.

  3. Klicken Sie im Bereich Vorlagen auf Windows Forms-Anwendung.

  4. Geben Sie im Feld Name die Bezeichnung ObjectBindingWalkthrough ein, und klicken Sie auf OK.

    Das Projekt ObjectBindingWalkthrough wird erstellt und dem Projektmappen-Explorer hinzugefügt.

In dieser exemplarischen Vorgehensweise werden einige Objekte für die Bindung benötigt. Im ersten Schritt werden einige Beispielobjekte zur Darstellung von Kunden und Bestellungen erstellt. Zur Darstellung von Kunden wird ein Customer-Objekt erstellt, das einen einzelnen Kunden darstellt. Zur Darstellung von Aufträgen wird ein Order-Objekt erstellt, das einen einzelnen Auftrag darstellt, sowie ein Orders-Objekt, das eine Auflistung von Order-Objekten darstellt. Für die Auflistung von Customer-Objekten wird die integrierte Auflistung in der BindingSource-Klasse verwendet, die weiter unten in dieser exemplarischen Vorgehensweise erläutert wird.

Erstellen des Customer-Objekts

So erstellen Sie das Customer-Objekt

  1. Klicken Sie im Menü Projekt auf Klasse hinzufügen.

  2. Nennen Sie die neue Klasse Customer, und klicken Sie auf Hinzufügen.

  3. Ersetzen Sie den Code in der Klassendatei Customer durch folgenden Code:

    Hinweis

    Das Customer-Objekt enthält eine ordersCollection-Eigenschaft vom Typ Orders.Im Editor wird die Meldung Der Typ 'Orders' ist nicht definiert angezeigt.Diese Meldung ist zu erwarten. Sie wird nicht mehr angezeigt, wenn Sie im nächsten Abschnitt die Klassen Order und Orders erstellen.

    ''' <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 + ")";
            }
        }
    }
    

Erstellen der Order-Objekte

So erstellen Sie das Order-Objekt und die Orders-Auflistung

  1. Klicken Sie im Menü Projekt auf Klasse hinzufügen.

  2. Nennen Sie die neue Klasse Order, und klicken Sie auf Hinzufügen.

  3. Ersetzen Sie den Code in der Klassendatei Order durch folgenden Code:

    ''' <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. Klicken Sie im Menü Datei auf Alle speichern.

Erstellen der Objektdatenquelle

Sie können mithilfe des Assistenten zum Konfigurieren von Datenquellen auf der Grundlage der im vorherigen Schritt erstellten Objekte eine Datenquelle erstellen.

So erstellen Sie die Objektdatenquelle

  1. Erstellen Sie das Projekt.

    Hinweis

    Bevor im Projekt Objekte im Assistent zum Konfigurieren von Datenquellen ausgewählt werden können, muss das Projekt erstellt werden.

  2. Öffnen Sie das Datenquellenfenster, indem Sie auf das Menü Daten klicken und die Option Datenquellen anzeigen auswählen.

  3. Klicken Sie im Datenquellenfenster auf die Option Neue Datenquelle hinzufügen.

    Der Assistent zum Konfigurieren von Datenquellen wird gestartet.

  4. Klicken Sie auf der Seite Datenquellentyp auswählen auf Datenbank und anschließend auf Weiter.

  5. Erweitern Sie auf der Seite Datenobjekte auswählen den Knoten ObjectBindingWalkthrough, und aktivieren Sie das Kontrollkästchen neben dem Objekt Kunde.

  6. Klicken Sie auf Fertig stellen.

    Das Customer-Objekt wird im Datenquellenfenster angezeigt.

Erstellen eines datengebundenen Formulars

An das Customer-Objekt gebundene Steuerelemente werden erstellt, indem Elemente aus dem Datenquellenfenster in ein Fomular gezogen werden.

So erstellen Sie ein Formular mit Steuerelementen, die an die Objekteigenschaften gebunden sind

  1. Wählen Sie im Projektmappen-Explorer die Option Form1, und klicken Sie auf Ansicht-Designer.

  2. Ziehen Sie den Knoten Kunde aus dem Fenster Datenquellen auf Form1.

  3. Erweitern Sie den Knoten Kunde, und ziehen Sie den Knoten Bestellungen aus dem Datenquellenfenster auf Form1.

Erstellen von TableAdapters, um Daten aus der Datenbank in die benutzerdefinierten Objekte zu laden

Zum Verschieben von Daten zwischen den Objekten und der Datenbank werden TableAdapters verwendet. Sie können mit dem Assistent zum Konfigurieren von Datenquellen TableAdapters für die Kunden- und Bestellungen-Tabellen erstellen.

So erstellen Sie die TableAdapters

  1. Wählen Sie im Menü Daten die Option Neue Datenquelle hinzufügen aus.

  2. Wählen Sie auf der Seite Datenquellentyp auswählen die Option Datenbank aus, und klicken Sie dann auf Weiter.

  3. Wählen Sie auf der Seite Wählen Sie ein Datenbankmodell aus die Option DataSet aus, und klicken Sie dann auf Weiter.

  4. Wählen Sie auf der Seite Wählen Sie Ihre Datenverbindung aus eine der folgenden Prozeduren aus:

    • Wenn eine Datenverbindung zur Beispieldatenbank Northwind in der Dropdownliste verfügbar ist, wählen Sie sie aus.

      - oder -

    • Wählen Sie Neue Verbindung aus, um eine neue Datenverbindung mit der Datenbank Northwind zu konfigurieren. Weitere Informationen finden Sie unter Gewusst wie: Herstellen einer Verbindung zu Daten in einer Datenbank.

  5. Nachdem Sie eine Datenverbindung ausgewählt haben, klicken Sie auf Weiter.

  6. Klicken Sie auf der Seite Verbindungszeichenfolge in der Programmkonfigurationsdatei speichern auf Weiter.

  7. Erweitern Sie auf der Seite Datenbankobjekte auswählen den Knoten Tabellen.

  8. Wählen Sie die Tabelle Customers und die Tabelle Orders aus, und klicken Sie dann auf Fertig stellen.

    Das NorthwindDataSet wird dem Projekt hinzugefügt, und die Tabellen Customers und Orders werden im Datenquellenfenster unter dem Knoten NorthwindDataSet angezeigt.

Hinzufügen von Datasets und TableAdapters zu Form1

Sie können dem Formular Instanzen des CustomersTableAdapter, des OrdersTableAdapter und des NorthwindDataSet hinzufügen, indem Sie deren repräsentative Komponenten aus der Toolbox ziehen.

So füllen Sie die Customer-Objekte mit Daten aus der Tabelle Customers

  1. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  2. Ziehen Sie ein NorthwindDataSet aus der Toolbox auf Form1.

  3. Ziehen Sie einen CustomersTableAdapter aus der Toolbox auf Form1.

  4. Ziehen Sie einen OrdersTableAdapter aus der Toolbox auf Form1.

Hinzufügen einer Abfrage zum CustomersTableAdapter, um nur einige Kunden zurückzugeben

In realen Anwendungen wird mit hoher Wahrscheinlichkeit niemals die ganze Tabelle von Daten zurückgegeben. In dieser exemplarischen Vorgehensweise werden die ersten fünf Kunden zurückgegeben.

Hinweis

Normalerweise übergeben Sie einen Parameter, um auszuwählen, welche Kunden zurückgegeben werden sollen. In dieser exemplarischen Vorgehensweise ist die Abfrage jedoch aus Platzgründen fest codiert, sodass nur fünf Kunden zurückgegeben werden und keine Benutzeroberfläche für die Eingabe von Parameterwerten erstellt werden muss.

So fügen Sie dem CustomersTableAdapter eine zusätzliche Abfrage hinzu

  1. Doppelklicken Sie im Projektmappen-Explorer auf die Datei NorthwindDataSet.xsd.

    Das NorthwindDataset wird im Dataset-Designer geöffnet.

  2. Klicken Sie mit der rechten Maustaste auf CustomersTableAdapter, und wählen Sie Abfrage hinzufügen aus.

    Der TableAdapter-Abfragekonfigurations-Assistent wird geöffnet.

  3. Behalten Sie die Standardeinstellung für SQL-Anweisungen verwenden bei, und klicken Sie auf Weiter.

  4. Behalten Sie die Standardeinstellung für SELECT-Anweisung, die Zeilen zurückgibt bei, und klicken Sie auf Weiter.

  5. Ersetzen Sie die SQL-Anweisung durch den folgenden Code, und klicken Sie auf Weiter:

    SELECT Top 5 CustomerID, CompanyName, ContactName, ContactTitle, Address, 
    City, Region, PostalCode, Country, Phone, Fax 
    FROM Customers 
    
  6. Deaktivieren Sie das Kontrollkästchen DataTable füllen.

  7. Benennen Sie die DataTable zurückgeben-Methode GetTop5Customers, und klicken Sie auf Fertig stellen.

    Die GetTop5Customers-Abfrage wird dem CustomersTableAdapter hinzugefügt.

Ändern der Abfrage für OrdersTableAdapter, um nur Bestellungen für den gewünschten Kunden zurückzugeben

Beim Erfassen von Bestellungen aus der Datenbank soll nicht die gesamte Bestellungstabelle zurückgegeben werden, es sind nur die Aufträge eines bestimmten Kunden gewünscht. In der folgenden Prozedur wird ausführlich erläutert, wie ein TableAdapter mit einer neuen Abfrage neu konfiguriert wird (anstatt wie im vorherigen Schritt dem CustomersTableAdapter eine zusätzliche Abfrage hinzuzufügen).

So konfigurieren Sie die Hauptabfrage des TableAdapter neu, um die Bestellungen eines einzelnen Kunden zurückzugeben

  1. Klicken Sie mit der rechten Maustaste auf den OrdersTableAdapter, und wählen Sie Konfigurieren aus.

    Der TableAdapter-Abfragekonfigurations-Assistent wird geöffnet.

  2. Ersetzen Sie die SQL-Anweisung durch den folgenden Code, und klicken Sie auf Weiter:

    SELECT OrderID, CustomerID, EmployeeID, OrderDate, 
    RequiredDate, ShippedDate, ShipVia, Freight, 
    ShipName, ShipAddress, ShipCity, ShipRegion, 
    ShipPostalCode, ShipCountry 
    FROM Orders 
    WHERE CustomerID = @CustomerID
    
  3. Deaktivieren Sie das Kontrollkästchen DataTable füllen.

  4. Benennen Sie die DataTable zurückgeben-Methode GetDataByCustomerID, und klicken Sie auf Fertig stellen.

    Die Fill-Hauptabfrage des OrdersTableAdapter wird durch die GetDataByCustomerID-Abfrage ersetzt.

  5. Erstellen Sie das Projekt, indem Sie im Menü Erstellen den Befehl Projektmappe erstellen auswählen.

Hinzufügen von Code, um Daten in das Customer-Objekt und das Order-Objekt zu laden

Führen Sie die TableAdapter-Abfragen aus, die neue Datentabellen zurückgeben (an Stelle von TableAdapter-Abfragen, die vorhandene Datentabellen auffüllen), um Daten in die benutzerdefinierten Objekte zu laden. Der Code durchläuft anschließend die Tabelle und füllt jedes Customer-Objekt mit den Kundeninformationen auf sowie alle Bestellungen in jeder Customer.Orders-Auflistung. Beachten Sie, wie der internen Auflistung der CustomerBindingSource (CustomerBindingSource.Add(currentCustomer)) die einzelnen Customer-Objekte hinzugefügt werden. Das BindingSource-Element stellt eine integrierte stark typisierte Auflistung von Customers-Elementen bereit, auf die über die List-Eigenschaft zugegriffen werden kann.

So laden Sie Daten in die Objekte

  1. Wählen Sie im Projektmappen-Explorer die Option Form1, und klicken Sie auf Code anzeigen.

  2. Ersetzen Sie den Code in Form1 durch folgenden Code:

    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();
            }
    
        }
    }
    

Testen der Anwendung

So testen Sie die Anwendung

  1. Drücken Sie F5, um die Anwendung auszuführen.

  2. Das Formular wird geöffnet, und die DataGridView-Steuerelemente werden mit den Beispieldaten gefüllt.

  3. Navigieren Sie in der DataGridView zu den Kunden, um die ihnen zugeordneten Bestellungen anzuzeigen.

Nächste Schritte

So fügen Sie der Anwendung Funktionalität hinzu

Siehe auch

Konzepte

Vorbereiten der Anwendung auf den Empfang von Daten

Abrufen von Daten für die Anwendung

Binden von Steuerelementen an Daten in Visual Studio

Bearbeiten von Daten in der Anwendung

Objektbindung in Visual Studio

Speichern von Daten

Weitere Ressourcen

Herstellen von Datenverbindungen in Visual Studio

Exemplarische Vorgehensweisen zur Arbeit mit Daten