逐步解說:資料繫結至自訂的商務物件
更新:2007 年 11 月
許多 Web 應用程式都使用多層進行建置,其中,中介層 (Middle Tier) 中的一或多個元件用來提供資料存取。Microsoft Visual Web Developer 包含可協助您建立資料元件的精靈,您可以將建立的資料元件用做中介層資料物件,如逐步解說:具有 Visual Studio 資料元件的資料繫結 Web 網頁中所述。
不過,您可能還想要建置自訂商務物件 (Business Object),而不是依賴於由精靈建立的資料元件。建立自訂商務物件可讓您實作自己的商務邏輯。此逐步解說說明如何建立可用做 ASP.NET Web 網頁之資料來源的基本商務物件。
在瀏覽這份逐步解說期間,您將瞭解如何:
建立可將資料傳回至網頁的元件。該元件將 XML 檔案用於其資料。
參考商務物件做為 Web 網頁的資料來源。
將控制項繫結至由商務物件傳回的資料。
使用商務物件讀取和寫入資料。
必要條件
若要完成這個逐步解說,您必須要有:
Visual Web Developer (Visual Studio)。
.NET Framework。
此逐步解說假設您已對如何使用 Visual Web Developer 具有一般瞭解。
建立網站
如果您已經在 Visual Web Developer 中建立了網站 (例如,藉由遵循逐步解說:在 Visual Web Developer 中建立基本 Web 網頁中的步驟),就可以使用該網站,並繼續進行下一節的步驟「建立商務資料的 XML 檔案」。否則,依照下列這些步驟建立新的網站和 Web 網頁。
若要建立檔案系統網站
開啟 Visual Web Developer。
在 [檔案] 功能表上,按一下 [新網站]。
[新網站] 對話方塊隨即出現。
在 [Visual Studio 安裝的範本] 下方,按一下 [ASP.NET 網站]。
在 [位置] 方塊中,輸入您想要用來保存網站頁面的資料夾名稱。
例如,輸入資料夾名稱 C:\WebSites。
在 [語言] 清單中,請按一下您想要操作的程式語言。
按一下 [確定]。
Visual Web Developer 會建立資料夾和命名為 Default.aspx 的新頁面。
建立商務資料的 XML 檔案
在下列程序中,您將建立商務元件資料的簡單 XML 檔案。
若要建立 XML 檔
在 [方案總管] 中,以滑鼠右鍵按一下 [App_Data],然後按一下 [加入新項目]。
注意事項: 確定您在 [App_Data] 資料夾中建立 XML 檔案。[App_Data] 資料夾在上面設定了允許 Web 網頁讀取和寫入資料至 XML 檔案的權限。
請在 [Visual Studio 安裝的範本] 底下,按一下 [XML 檔案]。
在 [名稱] 方塊中,輸入 Authors.xml。
按一下 [加入]。
會建立新的 XML 檔案,其中只包含 XML 指示詞。
複製下列 XML 資料,然後將這些資料貼到檔案中,覆寫檔案中原有的內容。
XML 檔案包含識別資料之資料庫結構的結構描述資訊,包括索引鍵的主索引鍵約束條件。
注意事項: 商務元件能以您的應用程式所適合的任何方式使用資料。此逐步解說會使用 XML 檔案。
<?xml version="1.0" standalone="yes"?> <dsPubs xmlns="http://www.tempuri.org/dsPubs.xsd"> <xs:schema id="dsPubs" targetNamespace="http://www.tempuri.org/dsPubs.xsd" xmlns:mstns="http://www.tempuri.org/dsPubs.xsd" xmlns="http://www.tempuri.org/dsPubs.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:element name="dsPubs" msdata:IsDataSet="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="authors"> <xs:complexType> <xs:sequence> <xs:element name="au_id" type="xs:string" /> <xs:element name="au_lname" type="xs:string" /> <xs:element name="au_fname" type="xs:string" /> <xs:element name="au_phone" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:unique name="Constraint1" msdata:PrimaryKey="true"> <xs:selector xpath=".//mstns:authors" /> <xs:field xpath="mstns:au_id" /> </xs:unique> </xs:element> </xs:schema> <authors> <au_id>172-32-1176</au_id> <au_lname>West</au_lname> <au_fname>Paul</au_fname> <au_phone>408 555-0123</au_phone> </authors> <authors> <au_id>213-46-8915</au_id> <au_lname>Gray</au_lname> <au_fname>Chris</au_fname> <au_phone>415 555-0120</au_phone> </authors> </dsPubs>
儲存 Authors.xml 檔案,然後將其關閉。
建立元件
下一步是建立要充當商務元件的類別。您將在網站的 [App_Code] 資料夾中保存元件。在實際應用程式中,您可以將元件保留在任何方便的存放區,包括全域組件 (Assembly) 快取。如果您的網站還沒有名為 [App_Code] 的目錄,則必須建立一個。
若要建立 App_Code 資料夾
在 [方案總管] 中,以滑鼠右鍵按一下網站名稱,然後按一下 [加入 ASP.NET 資料夾],再按 [App_Code]。
注意事項: 資料夾必須命名為 [App_Code]。
您現在可以將元件加入至網站。
若要建立商務元件
在 [方案總管] 中,以滑鼠右鍵按一下 [App_Code] 資料夾,然後按一下 [加入新項目]。
注意事項: 確定您在 [App_Code] 資料夾中建立新項目。
[加入新項目] 對話方塊隨即出現。
請在 [Visual Studio 安裝的範本] 底下,按一下 [類別]。
在 [語言] 方塊中,請按一下您想要使用的程式語言。
在 [名稱] 方塊中,輸入 BusinessObject。
按一下 [加入]。
Visual Web Developer 會建立新的類別檔案並開啟程式碼編輯器。
複製下列程式碼,然後將其貼入檔案,以覆寫檔案中原有的程式碼。
Imports Microsoft.VisualBasic Imports System Imports System.Web Imports System.Data Namespace PubsClasses Public Class AuthorClass Private dsAuthors As DataSet = _ New System.Data.DataSet("ds1") Private filePath As String = _ HttpContext.Current.Server.MapPath _ ("~/App_Data/authors.xml") Public Sub New() dsAuthors.ReadXml(filePath, Data.XmlReadMode.ReadSchema) End Sub Public Function GetAuthors() As DataSet Return dsAuthors End Function End Class End Namespace
using System; using System.Web; using System.Data; namespace PubsClasses { public class AuthorClass { private DataSet dsAuthors = new DataSet("ds1"); private String filePath = HttpContext.Current.Server.MapPath ("~/App_Data/Authors.xml"); public AuthorClass() { dsAuthors.ReadXml (filePath, XmlReadMode.ReadSchema); } public DataSet GetAuthors () { return dsAuthors; } } }
注意事項: 確定 filePath 變數的值會參考先前所建立的 XML 檔案名稱。
當建立類別的執行個體時,它會讀取 XML 檔案並將其轉譯成資料集。類別的 GetAuthors 方法會傳回該資料集。
儲存檔案。您必須儲存檔案,才能在下一章節中正常使用。
使用商務元件顯示資料
您現在可以叫用 (Invoke) Web 網頁中的商務元件並顯示其資料。若要參考此元件,請使用 ObjectDataSource 控制項,該控制項專為使用物件所設計。
若要建立參考元件的 ObjectDataSource 控制項
切換至 [Default.aspx] 頁面或開啟它。
注意事項: 如果您沒有 Default.aspx 頁面,則可以使用其他頁面。或者,您可以將新頁面加入至網站。在 [方案總管] 中,以滑鼠右鍵按一下網站名稱,再按 [加入新項目],然後加入 [Web Form]。
切換至 [設計] 檢視。
在 [工具箱] 的 [資料] 資料夾中,將 [ObjectDataSource] 控制項拖曳至頁面。
在 [屬性] 視窗中,將 [ID] 設定為 AuthorsObjectDataSource。
以滑鼠右鍵按一下 [ObjectDataSource] 控制項,然後按一下智慧標籤以顯示 [ObjectDataSource 工作] 功能表。
在 [ObjectDataSource 工作] 功能表上,按一下 [設定資料來源]。
[設定資料來源] 精靈便會出現。
在 [選擇您的商務物件] 清單,按一下 [PubsClasses.AuthorClass]。
按一下 [下一步]。
在 [選取] 索引標籤中,於 [選擇方法] 清單中,按一下 [GetAuthors(),傳回資料集]。
[GetAuthors] 方法定義於您先前建立的商務類別中。它會傳回包含來自 Authors.xml 檔案之資料的資料集。
按一下 [完成]。
您已輸入的組態資訊會指定應呼叫元件的 GetAuthors 方法才能從元件取得資料。
注意事項: 您針對 SelectMethod 屬性所指定的方法名稱是區分大小寫的,即使是以 Visual Basic .NET 進行程式設計。
您現在可以使用 ObjectDataSource 控制項從元件中取得資料。您將在頁面上的 GridView 控制項中顯示資料。
若要顯示來自元件的資料。
從 [工具箱] 的 [資料] 資料夾中,將 [GridView] 控制項拖曳至頁面。
以滑鼠右鍵按一下 [GridView] 控制項,然後按一下智慧標籤,如果 [一般 GridView 工作] 功能表未顯示的話。
在 [一般 GridView 工作] 功能表上的 [選擇資料來源] 方塊中,按一下 [AuthorsObjectDataSource]。
按 CTRL+F5 執行頁面。
[GridView] 控制項,其中會顯示 XML 資料。
使用商務元件插入資料
對於其他資料來源控制項 (例如 SqlDataSource 控制項) ObjectDataSource 控制項會支援更新 (插入、更新和刪除)。在本章節中,您將使用插入作者記錄的方法修改商務元件。然後,您將變更頁面,以便使用者可輸入新的作者資訊並修改 ObjectDataSource 控制項,以執行插入。
注意事項: |
---|
在這部分的逐步解說中,將更新您先前建立的 Authors.xml 檔案。當嘗試更新檔案時,應用程式具有在執行階段寫入檔案的權限或網頁將顯示錯誤,這是很重要的。如果您在 [App_Data] 資料夾中建立了 Authors.xml 檔案,則會自動設定權限。 |
若要修改商務元件以允許插入
切換至 BusinessObject 檔案。
以 AuthorClass 之最終成員的身分加入下列方法。
Public Sub InsertAuthor(ByVal au_id As String, _ ByVal au_lname As String, _ ByVal au_fname As String, ByVal au_phone As String) Dim workRow As DataRow = dsAuthors.Tables(0).NewRow workRow.BeginEdit() workRow(0) = au_id workRow(1) = au_lname workRow(2) = au_fname workRow(3) = au_phone workRow.EndEdit() dsAuthors.Tables(0).Rows.Add(workRow) dsAuthors.WriteXml(filePath, Data.XmlWriteMode.WriteSchema) End Sub
public void InsertAuthor (String au_id, String au_lname, String au_fname, String au_phone) { DataRow workRow = dsAuthors.Tables[0].NewRow (); workRow.BeginEdit (); workRow[0] = au_id; workRow[1] = au_lname; workRow[2] = au_fname; workRow[3] = au_phone; workRow.EndEdit (); dsAuthors.Tables[0].Rows.Add (workRow); dsAuthors.WriteXml (filePath, XmlWriteMode.WriteSchema); }
注意事項: 請密切留意用於將作者資訊傳送至方法 (au_id、au_lname、au_fname 和 au_phone) 之變數的名稱。這些名稱必須符合在先前建立的 XML 檔案之結構描述中定義的資料行名稱。
您需要四個值 (必須在頁面中以參數的形式提供),才能插入新的方法。該方法會在資料集中建立新的資料列,然後將更新的資料集寫出為 XML 檔案。
儲存檔案。
下一步是變更頁面,以便使用者可以輸入新的作者資訊。對於下列程序,您將使用 DetailsView 控制項。
若要加入用於插入資料的控制項
切換至 Default.aspx 頁面或開啟它。
切換至 [設計] 檢視。
從 [工具箱] 的 [資料] 資料夾中,將 [DetailsView] 控制項拖曳至頁面。
注意事項: 頁面的精確配置並不重要。
在 [DetailsView 工作] 功能表的 [選擇資料來源] 方塊中,按一下 [AuthorsObjectDataSource]。
注意事項: 如果 [DetailsView 工作] 功能表不可見,請按一下智慧標籤。
在 [屬性] 視窗中,將 [AutoGenerateInsertButton] 設定為 true。
這會使 [DetailsView] 控制項呈現 [新增] 按鈕,使用者按一下該按鈕可以將控制項置於資料輸入模式。
最後,您必須設定 ObjectDataSource 控制項,以指定控制項在插入資料時應採取的動作。
若要設定用於插入資料的資料來源控制項
以滑鼠右鍵按一下 [AuthorsObjectDataSource],然後按一下 [屬性],然後將 [InsertMethod] 設定為 InsertAuthor。
此為您加入至商務元件之方法的名稱。
您現在可以將新的作者插入 XML 檔案。
若要測試插入
按 CTRL+F5 執行 Default.aspx 頁面。
在 [DetailsView] 控制項中,按一下 [新增] 按鈕。
控制項會以文字方塊重新顯示。
輸入新的作者資訊,然後按一下 [插入]。
新的作者資訊會加入至 XML 檔案。[GridView] 控制項會立即反映新記錄。
後續步驟
在本逐步解說中,說明了如何使用資料元件。您可能會想要實驗其他的巡覽功能。例如,您可能要:
加入更新和刪除功能。若要這樣做,您應將方法加入至元件。這樣做就像是加入插入邏輯:將方法加入至元件,設定資料來源控制項叫用元件方法,加入適當的參數,並加入一行程式碼以呼叫資料來源控制項的 Update 和 Delete 方法。如需詳細資訊,請參閱逐步解說:使用 DetailsView Web 伺服器控制項在 Web 網頁中編輯和插入資料。
將商務元件變更為使用資料庫資料,而非 XML 檔。您不需要對頁面上的控制項做任何變更。
限制可對資料進行變更的使用者。典型的方法就是將成員資格和角色加入至您的網站,然後再建立商務元件可在允許變更資料前進行檢查的規則。如需詳細資訊,請參閱逐步解說:建立具有成員資格和使用者登入的網站和逐步解說:使用角色管理網站使用者。
請參閱
工作
逐步解說:具有 Visual Studio 資料元件的資料繫結 Web 網頁
逐步解說:在 Visual Web Developer 中使用網站中的共用程式碼
逐步解說:在 Visual Web Developer 中建立基本 Web 網頁