備註
類別 DataSet 和相關類別是 2000 年代初的舊版 .NET Framework 技術,可讓應用程式在應用程式與資料庫中斷連線時使用記憶體中的數據。 這些技術特別適用於可讓使用者修改數據並將變更保存回資料庫的應用程式。 雖然數據集是經過證實的成功技術,但新 .NET 應用程式的建議方法是使用 Entity Framework Core。 Entity Framework 提供更自然的方式,以表格式數據作為物件模型使用,而且具有更簡單的程序設計介面。
在本逐步解說中,您會建立包含數據綁定控件的 WPF 應用程式。 控制項將系結到封裝在資料集中的產品記錄。 您也可以新增按鈕來瀏覽產品,並將變更儲存至產品記錄。
本逐步解說將說明下列工作:
建立 WPF 應用程式和從 AdventureWorksLT 範例資料庫中的數據產生的數據集。
將數據表從 [數據源 ] 視窗拖曳至 WPF 設計工具中的視窗,以建立一組數據綁定控件。
建立可向前和向後瀏覽產品記錄的按鈕。
建立按鈕,以將使用者對數據表和基礎數據源的產品記錄所做的變更儲存。
備註
本文中的指示說明 Visual Studio 中可用的互動式開發體驗 (IDE) 最新版本。 您的電腦可能會顯示某些使用者介面元素的不同名稱或位置。 您可能使用不同的 Visual Studio 版本或不同的環境設定。 如需詳細資訊,請參閱 個人化 IDE。
先決條件
您需要下列元件才能完成本操作指南:
若要完成本教學課程,您需要在 Visual Studio 中安裝的 .NET 桌面開發和資料儲存及處理工作負載。 若要安裝它們,請開啟 Visual Studio Installer,然後選擇您想要修改的 Visual Studio 版本旁的 [修改] (或 [更多>修改])。 請參閱 修改 Visual Studio。
可以存取正在執行且已附加 AdventureWorks Light (AdventureWorksLT) 範例資料庫的 SQL Server 或 SQL Server Express 實例。 若要下載資料庫,請參閱 AdventureWorks 範例資料庫。
先前瞭解下列概念也很有幫助,但不需要以完成導覽為前提:
數據集和 TableAdapters。 如需詳細資訊,請參閱Visual Studio和TableAdapters中的數據集工具。
WPF 數據系結。 如需詳細資訊,請參閱 資料系結概觀。
建立專案
建立新的 WPF 專案以顯示產品記錄。
開啟 Visual Studio。
在 [開始] 視窗中,選擇 [建立新專案]。
搜尋 C# WPF 應用程式 項目範本,並遵循建立專案的步驟,將專案命名為 AdventureWorksProductsEditor。
Visual Studio 會建立 AdventureWorksProductsEditor 專案。
建立應用程式的數據集
您必須先定義應用程式的數據模型,並將其新增至 [數據源 ] 視窗,才能建立數據綁定控件。 在本操作指引中,您會建立資料集作為資料模型。
在 [ 數據] 功能表上,按兩下 [ 顯示資料源]。
[ 數據源] 視窗隨即開啟。
在 [數據源] 視窗中,按一下 [新增資料源]。
[數據源組態精靈] 隨即開啟。
在 [ 選擇數據源類型 ] 頁面上,選取 [ 資料庫],然後選取 [ 下一步]。
在 [ 選擇資料庫模型] 頁面上,選取 [ 數據集],然後選取 [ 下一步]。
在 [ 選擇您的數據連線 ] 頁面上,選取下列其中一個選項:
如果下拉式清單中有 AdventureWorksLT 範例資料庫的數據連線可用,請選取它,然後選取 [ 下一步]。
單擊 [新增連線],然後建立 AdventureWorksLT 資料庫的連線。
在 [將連接字串儲存至應用程式配置檔 ] 頁面上,選取 [ 是],將連線儲存為 複選框,然後選取 [ 下一步]。
在 [ 選擇您的資料庫物件] 頁面上,展開 [ 數據表],然後選取 [產品] (SalesLT) 數據表。
按一下完成。
Visual Studio 會將新的
AdventureWorksLTDataSet.xsd檔案新增至專案,並將對應的 AdventureWorksLTDataSet 專案新增至 [數據源] 視窗。 檔案AdventureWorksLTDataSet.xsd定義了一個名為AdventureWorksLTDataSet的具型別數據集,以及一個名為ProductTableAdapter的 TableAdapter。 稍後在本逐步解說中,您將使用ProductTableAdapter來填滿數據集的數據,並將變更儲存回資料庫。建置專案。
編輯 TableAdapter 的預設填滿方法
若要以數據填滿數據集,請使用 Fill 的 ProductTableAdapter方法。 根據預設,Fill 方法會將 Product 資料表中的所有資料列填入 AdventureWorksLTDataSet。 您可以修改此方法,只傳回數據列的子集。 在此逐步教學中,請修改 Fill 方法,使其僅返回具有相片之產品的數據列。
在 方案總管中,按兩下 AdventureWorksLTDataSet.xsd 檔案。
數據集設計工具隨即開啟。
在設計工具中,以滑鼠右鍵按兩下 Fill、 GetData() 查詢,然後選取 [ 設定]。
TableAdapter 組態精靈隨即開啟。
在 [輸入 SQL 語句] 頁面中,於文本框中的 語句後面
SELECT新增下列WHERE子句。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 (產品類別 ID)
ProductModelID
縮圖照片檔案名
rowguid
修改日期
單擊 ThumbNailPhoto 節點旁的下拉菜單,然後選取 [影像]。
備註
根據預設,代表圖片的 [數據源] 視窗中的專案會將其預設控件設定為 [無]。 這是因為圖片會以位元組陣列的形式儲存在資料庫中,而位元組陣列可以包含的內容,範圍從簡單的位元組陣列到大型應用程式的可執行檔等。
從 [ 數據源] 視窗,將 [產品 ] 節點拖曳至包含按鈕之數據列底下的方格數據列。
Visual Studio 會產生 XAML,定義一組系結至 Products 數據表中數據的控件。 它也會產生載入數據的程序代碼。 如需所產生 XAML 和程式碼的詳細資訊,請參閱 將 WPF 控件系結至 Visual Studio 中的數據。
在設計工具中,按兩下 產品標識碼 標籤旁的文字框。
在 [ 屬性] 視窗中,選取 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 為您的數據集所生成的方法UpdateAllTableAdapterManager。 如需詳細資訊,請參閱 TableAdapters。
測試應用程式
建置並執行應用程式。 確認您可以檢視和更新產品記錄。
請按 F5。
應用程式會建置並執行。 確認下列各項:
文字框會顯示具有相片之第一筆產品記錄中的數據。 本產品具有產品標識碼 713,且名稱 Long-Sleeve Logo Jersey, S。
您可以按下 > 或 < 按鈕,流覽其他產品記錄。
在其中一個產品記錄中,變更 [大小] 值,然後選取 [ 儲存變更]。
關閉應用程式,然後在 Visual Studio 中按 F5 重新啟動應用程式。
流覽至您變更的產品記錄,並確認變更已保存。
關閉應用程式。
後續步驟
完成本逐步解說之後,您可以嘗試下列相關工作:
瞭解如何使用 Visual Studio 中的 [數據源] 視窗,將 WPF 控件系結至其他類型的數據源。 如需詳細資訊,請參閱 將 WPF 控制項系結至 WCF 數據服務。
瞭解如何在 Visual Studio 中使用 [資料源] 視窗,在 WPF 控件中顯示相關數據(也就是父子關聯性中的數據)。 如需詳細資訊,請參閱 逐步解說:在 WPF 應用程式中顯示相關數據。