共用方式為


HOW TO:使用專案資料來源繫結資料 (WCF Data Services)

您可以在 WCF Data Services 用戶端應用程式中,建立以產生之資料物件為基礎的資料來源。 當您使用 [加入服務參考] 對話方塊加入資料服務的參考時,便會建立一個專案資料來源以及所產生的用戶端資料類別。系統會針對資料服務所公開的每個實體集,建立一個資料來源。 您可以從 [資料來源] 視窗將這些資料來源項目拖曳至設計工具來建立表單,以顯示來自服務的資料。 這些項目會成為繫結至資料來源的控制項。 在執行期間,資料會繫結至 DataServiceCollection<T> 類別的執行個體,其中會填入資料服務查詢傳回的物件。 如需詳細資訊,請參閱將資料繫結至控制項 (WCF Data Services)

本主題的範例使用 Northwind 範例資料服務和自動產生的用戶端資料服務類別。 此服務和用戶端資料類別會在您完成 WCF Data Services 快速入門時建立。

使用 WPF 視窗中的專案資料來源

  1. 在 WPF 專案中,將參考加入至 Northwind 資料服務。 如需詳細資訊,請參閱 HOW TO:加入資料服務參考 (WCF Data Services)

  2. 在 [資料來源] 視窗中,展開 [NorthwindEntities] 專案資料來源中的 [Customers] 節點。

  3. 按一下 [CustomerID] 項目,選取清單的 [ComboBox],然後將 [CustomerID] 項目從 [Customers] 節點拖曳至設計工具。

    這會在視窗的 XAML 檔案中,建立下列物件項目:

  4. 將 [Orders] 導覽屬性拖曳至設計工具。

    這會在視窗的 XAML 檔案中,建立下列其他物件項目:

    • 第二個 CollectionViewSource 物件,名為 customersOrdersViewSource,其資料來源是 customerViewSource。

    • 資料繫結 DataGrid 控制項,名為 ordersDataGrid。

  5. (選擇項) 將其他項目從 [Customers] 節點拖曳至設計工具。

  6. 開啟表單的程式碼頁並加入下列 using 陳述式 (在 Visual Basic 中為 Imports):

    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  7. 在定義表單的部分類別中,加入下列可建立 ObjectContext 執行個體並定義 customerID 常數的程式碼。

    Private context As NorthwindEntities
    Private customersViewSource As CollectionViewSource
    Private trackedCustomers As DataServiceCollection(Of Customer)
    Private Const customerCountry As String = "Germany"
    Private Const svcUri As String = "https://localhost:12345/Northwind.svc/"
    
    private NorthwindEntities context;
    private CollectionViewSource customersViewSource;
    private DataServiceCollection<Customer> trackedCustomers;
    private const string customerCountry = "Germany";
    private const string svcUri = "https://localhost:12345/Northwind.svc/";
    
  8. 在設計工具中選取視窗。

    注意

    請確定您選取的是視窗本身,而不是選擇視窗的內容。如果已選取視窗,接近 [屬性] 視窗上方的 [名稱] 文字方塊應包含該視窗的名稱。

  9. 在 [屬性] 視窗中,選擇 [事件] 按鈕。

  10. 尋找 [已載入] 事件,然後按兩下這個事件旁的下拉式清單。

    Visual Studio 會開啟視窗的程式碼後置檔案,然後產生 Loaded 事件處理常式。

  11. 在新建立的 Loaded 事件處理常式中,複製並貼上下列程式碼。

    ' Initialize the context for the data service.
    context = New NorthwindEntities(New Uri(svcUri))
    
    ' Create a LINQ query that returns customers with related orders.
    Dim customerQuery = From cust In context.Customers.Expand("Orders") _
                             Where cust.Country = customerCountry _
                             Select cust
    
    ' Create a new collection for binding based on the LINQ query.
    trackedCustomers = New DataServiceCollection(Of Customer)(customerQuery)
    
        try
            ' Get the customersViewSource resource and set the binding to the collection.
        customersViewSource = _
            CType(Me.FindResource("customersViewSource"), CollectionViewSource)
        customersViewSource.Source = trackedCustomers
        customersViewSource.View.MoveCurrentToFirst()
    Catch ex As DataServiceQueryException
        MessageBox.Show("The query could not be completed:\n" + ex.ToString())
    Catch ex As InvalidOperationException
        MessageBox.Show("The following error occurred:\n" + ex.ToString())
    End Try
    
    // Initialize the context for the data service.
    context = new NorthwindEntities(new Uri(svcUri));
    
    // Create a LINQ query that returns customers with related orders.
    var  customerQuery = from cust in context.Customers.Expand("Orders")
                         where cust.Country == customerCountry
                         select cust;
    
    // Create a new collection for binding based on the LINQ query.
    trackedCustomers = new DataServiceCollection<Customer>(customerQuery);
    
    try
    {
        // Get the customersViewSource resource and set the binding to the collection.
        customersViewSource =
            ((CollectionViewSource)(this.FindResource("customersViewSource")));
        customersViewSource.Source = trackedCustomers;
        customersViewSource.View.MoveCurrentToFirst();
    }
    catch (DataServiceQueryException ex)
    {
        MessageBox.Show("The query could not be completed:\n" + ex.ToString());
    }
    catch (InvalidOperationException ex)
    {
        MessageBox.Show("The following error occurred:\n" + ex.ToString());
    }
    
  12. 這個程式碼會根據 LINQ 查詢執行傳回 Customers 物件的 IEnumerable<T>,以及 Northwind 資料服務的相關 Orders 物件,建立 Customers 型別的 DataServiceCollection<T>,然後繫結至 customersViewSource。

使用 Windows Form 中的專案資料來源

  1. 在 [資料來源] 視窗中,展開 [NorthwindEntities] 專案資料來源中的 [Customers] 節點。

  2. 按一下 [CustomerID] 項目,選取清單的 [ComboBox],然後將 [CustomerID] 項目從 [Customers] 節點拖曳至設計工具。

    這會在表單上建立下列控制項:

    • BindingSource 執行個體,名為 customersBindingSource。

    • BindingNavigator 執行個體,名為 customersBindingNavigator。 您可以刪除這個不再需要的控制項。

    • 資料繫結 ComboBox,名為 CustomerID。

    • Label

  3. 將 [Orders] 導覽屬性拖曳至表單。

  4. 這會建立 ordersBindingSource 控制項,且控制項的 DataSource 屬性設為 customersBindingSource 和 DataMember 屬性設為 Customers。 表單上也會建立 ordersDataGridView 資料繫結控制項,並伴隨著標示適當的標籤控制項。

  5. (選擇項) 將其他項目從 [Customers] 節點拖曳至設計工具。

  6. 開啟表單的程式碼頁並加入下列 using 陳述式 (在 Visual Basic 中為 Imports):

    Imports System.Data.Services.Client
    Imports NorthwindClient.Northwind
    
    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  7. 在定義表單的部分類別中,加入下列可建立 ObjectContext 執行個體並定義 customerID 常數的程式碼。

    Private context As NorthwindEntities
    Private trackedCustomers As DataServiceCollection(Of Customer)
    Private Const customerCountry As String = "Germany"
    Private Const svcUri As String = "http:'localhost:12345/Northwind.svc/"
    
    private NorthwindEntities context;
    private DataServiceCollection<Customer> trackedCustomers;
    private const string customerCountry = "Germany";
    private const string svcUri = "https://localhost:12345/Northwind.svc/";
    
  8. 在表單設計工具中,按兩下表單。

    這樣會開啟表單的字碼頁,並且建立用於處理表單之 Load 事件的方法。

  9. 在 Load 事件處理常式中,複製並貼入下列程式碼。

    ' Initialize the context for the data service.
    context = New NorthwindEntities(New Uri(svcUri))
    Try
        ' Create a LINQ query that returns customers with related orders.
        Dim customerQuery = From cust In context.Customers.Expand("Orders") _
                                Where cust.Country = customerCountry _
                                Select cust
    
        ' Create a new collection for binding based on the LINQ query.
        trackedCustomers = New DataServiceCollection(Of Customer)(customerQuery)
    
        'Bind the Customers combobox to the collection.
        customersComboBox.DisplayMember = "CustomerID"
        customersComboBox.DataSource = trackedCustomers
    Catch ex As DataServiceQueryException
        MessageBox.Show("The query could not be completed:\n" + ex.ToString())
    Catch ex As InvalidOperationException
        MessageBox.Show("The following error occurred:\n" + ex.ToString())
    
    // Initialize the context for the data service.
    context = new NorthwindEntities(new Uri(svcUri));
    try
    {
        // Create a LINQ query that returns customers with related orders.
        var customerQuery = from cust in context.Customers.Expand("Orders")
                            where cust.Country == customerCountry
                            select cust;
    
        // Create a new collection for binding based on the LINQ query.
        trackedCustomers = new DataServiceCollection<Customer>(customerQuery);
    
        //Bind the Customers combobox to the collection.
        customersComboBox.DisplayMember = "CustomerID";
        customersComboBox.DataSource = trackedCustomers;
    }
    catch (DataServiceQueryException ex)
    {
        MessageBox.Show("The query could not be completed:\n" + ex.ToString());
    }
    catch (InvalidOperationException ex)
    {
        MessageBox.Show("The following error occurred:\n" + ex.ToString());
    }
    
  10. 這個程式碼會根據 DataServiceQuery<TElement> 執行傳回 Northwind 資料服務之 Customers的 IEnumerable<T>,建立 Customers 型別的 DataServiceCollection<T>,然後繫結至 customersBindingSource。

請參閱

工作

HOW TO:將資料繫結至 Windows Presentation Foundation 項目 (WCF Data Services)

其他資源

資料用戶端 (WCF Data Services)