將 WPF 控制項繫結至 .NET Framework 應用程式中的資料集
注意
資料集和相關類別是 2000 年代初的舊版 .NET Framework 技術,可讓應用程式在應用程式與資料庫中斷連線時使用記憶體中的資料。 這些技術特別適用於可讓使用者修改資料並將變更保存回資料庫的應用程式。 雖然已證明資料集是非常成功的技術,但建議新的 .NET 應用程式使用 Entity Framework Core。 Entity Framework 提供更自然的方式,將表格式資料作為物件模型使用,而且具有更簡單的程式設計介面。
在此逐步解說中,您會建立包含資料繫結控制項的 WPF 應用程式。 這些控制項會繫結至封裝於資料集中的產品記錄。 您也會新增按鈕以瀏覽產品,並將變更儲存至產品記錄。
本逐步解說將說明下列工作:
建立 WPF 應用程式,以及建立從 AdventureWorksLT 範例資料庫中的資料產生的資料集。
從 [資料來源] 視窗將資料表拖曳至 WPF 設計工具的視窗,以建立一組資料繫結控制項。
建立可向前及向後巡覽產品記錄的按鈕。
建立可將使用者對產品記錄所做的變更儲存至資料表和基礎資料來源的按鈕。
注意
在本文的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置。 您使用的可能是不同版本的 Visual Studio 或不同的環境設定。 如需詳細資訊,請參閱將 IDE 個人化。
必要條件
您需要下列元件才能完成這個逐步解說:
若要完成本教學課程,您需要在 Visual Studio 中安裝 .NET 桌面開發和資料儲存和處理工作負載。 若要安裝,請開啟 Visual Studio 安裝程式並選擇您要修改 Visual Studio 版本旁的 [修正] (或 [其他]>[修改])。 請參閱修改 Visual Studio。
對執行中的 SQL Server 或 SQL Server Express (其中連結了 AdventureWorks Light (AdventureWorksLT) 範例資料庫) 執行個體的存取權。 若要下載資料庫,請參閱 AdventureWorks 範例資料庫。
預先了解下列概念也有助於完成此逐步解說 (但非必要):
資料集和 TableAdapter。 如需詳細資訊,請參閱 Visual Studio 中的資料集工具和 TableAdapters。
WPF 資料繫結。 如需詳細資訊,請參閱 資料繫結概觀。
建立專案
建立新的 WPF 專案以顯示產品記錄。
開啟 Visual Studio。
在開始視窗中,選擇 [建立新專案]。
搜尋 C# WPF 應用程式 專案範本,並遵循建立專案的步驟,將專案命名為 AdventureWorksProductsEditor。
Visual Studio 隨即建立 AdventureWorksProductsEditor 專案。
建立應用程式的資料集
建立資料繫結控制項之前,您必須先定義應用程式的資料模型,並將其新增至 [資料來源] 視窗。 在此逐步解說中,您會建立資料集做為資料模型。
按一下 [ 資料 ] 功能表上的 [ 顯示資料來源]。
[資料來源] 視窗隨即開啟。
在 [ 資料來源 ] 視窗中,按一下 [ 加入新資料來源]。
[資料來源組態精靈] 隨即開啟。
在 [選擇資料來源類型] 頁面上選取 [資料庫],然後選取 [下一步]。
在 [選擇資料庫模型] 頁面上,選取 [資料集],然後選取 [下一步]。
在 [選擇資料連線] 頁面中,選取下列其中一個選項:
若下拉式清單中有提供 AdventureWorksLT 範例資料庫的資料連線,請選取此資料連線,然後選取 [下一步]。
按一下 [新增連線],建立與 AdventureWorksLT 資料庫的連線。
在 [將連接字串儲存到應用程式設定檔] 頁面中,選取 [是,將連線儲存為] 核取方塊,然後選取 [下一步]。
在 [選擇您的資料庫物件] 頁面中,展開 [資料表],然後選取 Product (SalesLT) 資料表。
按一下完成。
Visual Studio 會將新的
AdventureWorksLTDataSet.xsd
檔案新增至專案,然後將對應的 [AdventureWorksLTDataSet] 項目新增至 [資料來源] 視窗。AdventureWorksLTDataSet.xsd
檔案會定義名為AdventureWorksLTDataSet
的具類型資料集及名為ProductTableAdapter
的 TableAdapter。 在此逐步解說稍後的內容中,您會使用ProductTableAdapter
將資料填入資料集,並將變更儲存回資料庫。組建專案。
編輯 TableAdapter 的預設填滿方法
若要將資料填入資料集,請使用 Fill
的 ProductTableAdapter
方法。 根據預設,Fill
方法會使用 Product 資料表的所有資料列,填入 ProductDataTable
中的 AdventureWorksLTDataSet
。 您可以修改此方法,使其只傳回資料列的子集。 在此逐步解說中,會修改 Fill
方法,使其只針對具有相片的產品傳回資料列。
在 [方案總管] 中,按兩下 AdventureWorksLTDataSet.xsd 檔案。
資料集設計工具隨即開啟。
在設計工具中,以滑鼠右鍵按一下 [填滿]、GetData() 查詢,然後選取 [設定]。
[TableAdapter 組態精靈] 隨即開啟。
在輸入 SQL 陳述式頁面中,將下列
WHERE
子句新增至文字輸入框中SELECT
陳述式的後面。WHERE ThumbnailPhotoFileName <> 'no_image_available_small.gif'
按一下完成。
定義使用者介面
透過在 WPF 設計工具中修改 XAML,將數個按鈕加入至視窗。 在此逐步解說稍後的內容中,您會加入程式碼,讓使用者使用這些按鈕捲動及儲存產品記錄的變更。
在 [方案總管] 中,按兩下 MainWindow.xaml。
隨即會在 [WPF 設計工具] 中開啟視窗。
在設計工具的 XAML 檢視中,在
<Grid>
標記之間新增下列程式碼:<Grid.RowDefinitions> <RowDefinition Height="75" /> <RowDefinition Height="625" /> </Grid.RowDefinitions> <Button HorizontalAlignment="Left" Margin="22,20,0,24" Name="backButton" Width="75"><</Button> <Button HorizontalAlignment="Left" Margin="116,20,0,24" Name="nextButton" Width="75">></Button> <Button HorizontalAlignment="Right" Margin="0,21,46,24" Name="saveButton" Width="110">Save changes</Button>
組建專案。
建立資料繫結控制項
從 [資料來源] 視窗將 Product
資料表拖曳至 WPF 設計工具,以建立可顯示客戶記錄的控制項。
在 [資料來源] 視窗中,按一下 [產品] 節點的下拉式清單功能表,然後選取 [詳細資料]。
展開 [產品] 節點。
在此範例中,某些欄位不會顯示,因此請按一下下列節點旁邊的下拉式清單功能表,然後選取 [無]:
ProductCategoryID
ProductModelID
ThumbnailPhotoFileName
rowguid
ModifiedDate
按一下 [ThumbNailPhoto] 節點旁邊的下拉式清單功能表,並選取 [影像]。
注意
根據預設,[資料來源] 視窗中表示圖片的項目,會將其預設控制項設定為 [無]。 這是因為圖片是以位元組陣列儲存在資料庫中,且位元組陣列可以包含任何項目,從簡單位元組陣列到大型應用程式的可執行檔。
從 [資料來源] 視窗將 [產品] 節點拖曳至包含按鈕之資料列下方的資料格列。
Visual Studio 會產生 XAML,其定義一組繫結至 [產品] 資料表之資料的控制項。 此外還會產生載入資料的程式碼。 如需所產生 XAML 和程式碼的詳細資訊,請參閱將 WPF 控制項繫結至 Visual Studio 中的資料。
在設計工具中,按一下 [Product ID] 標籤旁邊的文字方塊。
在 [屬性] 視窗中,選取 [IsReadOnly] 屬性旁邊的核取方塊。
巡覽產品記錄
新增可讓使用者使用 < 及 > 按鈕捲動產品記錄的程式碼。
在設計工具中,按兩下視窗介面上的 < 按鈕。
Visual Studio 會開啟程式碼後置檔案,並建立 Click 事件的新
backButton_Click
事件處理常式。修改
Window_Loaded
事件處理常式,使ProductViewSource
、AdventureWorksLTDataSet
和AdventureWorksLTDataSetProductTableAdapter
位於方法之外,且整個表單都可以存取。 只將這些項目宣告為表單通用,並以類似下列的方式在Window_Loaded
事件處理常式內予以指派:private AdventureWorksProductsEditor.AdventureWorksLTDataSet AdventureWorksLTDataSet; private AdventureWorksProductsEditor.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter adventureWorksLTDataSetProductTableAdapter; private System.Windows.Data.CollectionViewSource productViewSource; private void Window_Loaded(object sender, RoutedEventArgs e) { AdventureWorksLTDataSet = ((AdventureWorksProductsEditor.AdventureWorksLTDataSet)(this.FindResource("adventureWorksLTDataSet"))); // Load data into the table Product. You can modify this code as needed. adventureWorksLTDataSetProductTableAdapter = new AdventureWorksProductsEditor.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter(); adventureWorksLTDataSetProductTableAdapter.Fill(AdventureWorksLTDataSet.Product); productViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("productViewSource"))); productViewSource.View.MoveCurrentToFirst(); }
將下列程式碼加入至
backButton_Click
事件處理常式:回到設計工具,然後按兩下 > 按鈕。
將下列程式碼加入至
nextButton_Click
事件處理常式:
將變更儲存至產品記錄
新增程式碼,讓使用者可以使用 [儲存變更] 按鈕儲存產品記錄的變更。
在設計工具中,按兩下 [儲存變更] 按鈕。
Visual Studio 會開啟程式碼後置檔案,並建立 Click 事件的新
saveButton_Click
事件處理常式。將下列程式碼加入至
saveButton_Click
事件處理常式:注意
此範例使用
Save
的TableAdapter
方法來儲存變更。 在此逐步解說中,這是適當的方法,因為只會變更一個資料表。 若您必須將變更儲存至多個資料表,可以改用 Visual Studio 以您的資料集所產生之UpdateAll
的TableAdapterManager
方法。 如需詳細資訊,請參閱TableAdapters。
測試應用程式
建置並執行應用程式。 驗證您是否可以檢視及更新產品記錄。
請按 F5。
隨即建置應用程式並執行。 驗證下列項目:
文字方塊會從具有相片的第一個產品記錄顯示資料。 此產品具有產品識別碼 713,以及名稱 Long-Sleeve Logo Jersey, S。
您可以按一下 > 或 < 按鈕,巡覽其他產品記錄。
在其中一個產品記錄中,變更 [大小] 值,然後選取 [儲存變更]。
關閉應用程式,然後在 Visual Studio 中按 F5,以重新啟動應用程式。
巡覽至您剛變更的產品記錄,確認變更已保存。
關閉應用程式。
下一步
完成此逐步解說後,您可以嘗試下列相關的工作:
了解如何使用 Visual Studio 中的 [資料來源] 視窗,將 WPF 控制項繫結至其他資料來源類型。 如需詳細資訊,請參閱將 WPF 控制項繫結至 WCF 資料服務。
了解如何使用 Visual Studio 中的 [資料來源] 視窗,顯示 WPF 控制項中的相關資料 (也就是父子關聯性中的資料)。 如需詳細資訊,請參閱逐步解說:在 WPF 應用程式中顯示相關資料。