Gewusst wie: Binden von Objekten an Windows Form-Steuerelemente (Entity Framework)

Mit Entity Framework können Sie Windows Form-Steuerelemente wie beispielsweise eine ComboBox oder ein DataGridView an eine EntityCollection oder ein ObjectQuery-Ergebnis binden. Es wird empfohlen, Steuerelemente nicht direkt an eine ObjectQuery zu binden. Stattdessen sollten die Steuerelemente an das Ergebnis der Execute-Methode gebunden werden. Weitere Informationen finden Sie unter Binden von Objekten an Steuerelemente (Entity Framework).

Das Beispiel in diesem Thema beruht auf dem AdventureWorks Sales-Modell. Um den Code in diesem Beispiel auszuführen, müssen Sie Ihrem Projekt bereits das "AdventureWorks Sales"-Modell hinzugefügt und das Projekt für die Verwendung von Entity Framework konfiguriert haben. Verwenden Sie hierzu das Verfahren aus Gewusst wie: Manuelles Konfigurieren eines Entity Framework-Projekts und Gewusst wie: Manuelles Definieren der Modell- und Zuordnungsdateien (Entity Framework).

Beispiel

Das folgende Beispiel stammt von Windows Form. Beim Laden des Formulars wird ein ObjectResult von SalesOrderHeader-Objekten durch Aufruf der Execute-Methode der ObjectQuery zurückgegeben. Dieses Ergebnis wird an ein Kombinationsfeld gebunden. Beim Auswählen einer Reihenfolge werden die zugehörigen EntityCollection der SalesOrderDetail-Objekte an ein DataGridView-Steuerelement gebunden.

using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Objects;
using System.Data.Objects.DataClasses;

namespace Microsoft.Samples.Edm
{
    public partial class Main : Form
    {
        private AdventureWorksEntities context;
        private int customerId = 277;

        public Main()
        {
            // Initializes the designer-generated controls.
            InitializeComponent();
        }
        
        private void Main_Load(object sender, EventArgs e)
        {
            // Initialize the object context.
            context = new AdventureWorksEntities();
            try
            {
                // Create a query for orders that includes line items.
                ObjectQuery<SalesOrderHeader> orderQuery = context.SalesOrderHeaders
                    .Where("it.CustomerID = @customerId", 
                    new ObjectParameter("customerId", customerId))
                    .Include("SalesOrderDetails");

                // Display the PO number in the combo box.
                this.ordersListBox.DisplayMember = "PurchaseOrderNumber";

                // Bind the combo box to the ObjectResult of SalesOrderHeader 
                // that is returned when the query is executed.
                this.ordersListBox.DataSource = orderQuery.Execute(MergeOption.AppendOnly);
            }
            catch (EntitySqlException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void ordersListBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Get the currently selected SalesOrderHeader object.
            SalesOrderHeader order = (SalesOrderHeader)this.ordersListBox.SelectedItem;

            // Bind the items for this order to the DataGridView.
            lineItemsDataGrid.DataSource = order.SalesOrderDetails;
        }

        private void saveButton_Click(object sender, EventArgs e)
        {
            // Get the current order.    
            SalesOrderHeader order = (SalesOrderHeader)ordersListBox.SelectedItem;

            try
            {
                // Save changes in the object context.
                context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
            }
            catch (OptimisticConcurrencyException)
            {
                // Resolve the concurrently conflict by refreshing the 
                // object context before saving changes. 
                context.Refresh(RefreshMode.ClientWins, order.SalesOrderDetails);

                // Resave changes in the object context.
                context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.InnerException.Message, "An error has occured");
            }
            finally
            {
                //  Refresh the latest data from the database.
                context.Refresh(RefreshMode.StoreWins, order);
                this.Refresh();
            }
        }
    }
}

Siehe auch

Aufgaben

Gewusst wie: Binden von Objekten an Windows Presentation Foundation-Steuerelemente (Entity Framework)
Gewusst wie: Hinzufügen eines Objekts als Projektdatenquelle (Entity Framework)

Konzepte

Binden von Objekten an Steuerelemente (Entity Framework)