Adventure Works 資料繫結 (EDM 範例應用程式)
AdventureWorks 資料繫結範例會示範使用 Entity Framework 的資料繫結。其資料模型定義於主題 AdventureWorks Sales Model (EDM) 中。這個應用程式會顯示並修改與 SalesOrderHeader 實體關聯的 SalesOrderDetail 實體。下圖顯示用來將 SalesOrderDetail 實體加入 SalesOrderHeader 的對話方塊及主要應用程式表單 (在背景)。
Entity Framework 中的資料繫結
可以使用幾行程式碼來完成 ObjectQuery 與 DataGridView 控制項的資料繫結。首先,請建立 ObjectQuery。然後,將 ObjectQuery 指派給 DataGridView 的 DataSource 屬性。
下列程式碼會將 AdventureWorksSalesEntitiesObjectContext 所提供之 ObjectQuery 中的單一 SalesOrderHeader 指派給 DataGridView 控制項。會從文字方塊剖析 SalesOrderHeader 中的 ID
編號來建立此查詢的參數。這個參數會用於此查詢的 where
子句中,以選取符合 ID 編號的單一 SalesOrderHeader。而查詢會指派給 DataGridView 控制項的 DataSource 屬性。在上圖中,Windows Form 上的頂層 DataGridView 控制項 (具有 [銷售訂單標頭] 標籤) 會由下列程式碼區段來填滿資料。使用 Execute
方法可以確保只會執行查詢一次。
ObjectParameter parameter =
new ObjectParameter("p", Int32.Parse(textBoxOrderId.Text));
dataGridViewSOHeader.DataSource =
objCtx.SalesOrderHeader.Where(
"it.SalesOrderID == @p",
parameter).Execute(MergeOption.OverwriteChanges);
在上圖中,DataGridView 控制項 (具有 [銷售訂單詳細資料] 標籤) 會由下列程式碼區段來填滿資料。SalesOrderHeader 具有關聯之 SalesOrderDetail 實體的集合 (這些實體是由 SalesOrderHeader 的 SalesOrderDetail 屬性所識別)。SalesOrderDetail 屬性實際上是 EntityCollection。此集合可指派給 BindingSource 控制項的 DataSource 屬性。然後,BindingSource 會指派給 DateGridView 控制項的 DataSource 屬性。
if(objCtx.SalesOrderHeader.Where(
"it.SalesOrderID == @p", parameter).Any())
{
SalesOrderHeader resultHeader =
objCtx.SalesOrderHeader.Where(
"it.SalesOrderID == @p", parameter).First();
resultHeader.SalesOrderDetail.Load();
dataGridViewOrderDetails.DataSource =
resultHeader.SalesOrderDetail;
}
資料繫結中的修改案例
如果對 [銷售訂單詳細資料] 資料格內顯示的其中一個 SalesOrderDetail 實體進行變更,則當新的資料儲存到儲存區之後,就必須更新資料繫結的 SalesOrderHeader。這會依照下列程式碼順序在儲存格編輯處理常式中完成。
首先,對儲存格所做的變更會由 ObjectContext 的 SaveChanges 方法儲存到儲存區。接下來,ObjectQuery 會擷取 SalesOrderHeader 實體。最後,ObjectContext 的 Refresh 方法會更新繫結至 DataGridControl 的資料。請注意,Refresh 方法的 RefreshMode.StoreWins 參數 (可指定儲存區中的資料) 會取代 ObjectContext 中的資料。
objCtx.SaveChanges();
ObjectParameter parameter =
new ObjectParameter("p", Int32.Parse(textBox1.Text));
SalesOrderHeader header =
objCtx.SalesOrderHeader.Where(
"it.SalesOrderID == @p", parameter).FirstOrDefault();
// Refresh the SalesOrderHeader in the grid.
objCtx.Refresh(RefreshMode.StoreWins, header);
本主題的程式碼案例是 AdventureWorks 資料繫結範例應用程式中所使用之 Entity Framework 資料繫結的主要功能。完整的程式碼包含在以下的主題中:AdventureWorks 資料繫結範例應用程式程式碼 (EDM 範例應用程式) 和 AdventureWorks 資料繫結範例加入 SalesOrderDetail 表單 (EDM 範例應用程式)。
另請參閱
概念
AdventureWorks Sales Model (EDM)
AdventureWorks 資料繫結範例應用程式程式碼 (EDM 範例應用程式)
AdventureWorks 資料繫結範例加入 SalesOrderDetail 表單 (EDM 範例應用程式)