介紹
在 ASP.NET 2.0 中有幾個新的數據源控件,例如,SqlDataSource、ObjectDataSource、XmlDataSource、AccessDataSource 和 SiteMapDataSource。它們全都可以用來從它們各自類型的數據源中檢索數據,並且可以綁定到各種數據綁定控件。數據源控件減少了為檢索和綁定數據甚至對數據進行排序、分頁或編輯而需要編寫的自定義代碼的數量。
其中 ObjectDataSource 控件可針對各種基礎數據存儲區(如 SQL 數據庫或 XML)啟用聲明性數據綁定模型。因為頁開發人員也常常將數據檢索(也可能包含業務邏輯)封裝在一個組件對象中,從而在呈現頁和數據提供程序之間引入另一個層。ObjectDataSource 控件允許開發人員使用此傳統的三層結構構造應用程序,同時仍然能夠利用 ASP.NET 中的聲明性數據綁定模型的易用性優點。
關鍵
1、在數據層創建 強類型的DataSet和TableAdapter,TableAdapter查詢可以使用現有的存儲過程。注:直接把表或存儲過程拖進來會自動創建TableAdapter
2、中間層的類用[System.ComponentModel.DataObject]聲明為數據組件,CRUD方法分別對應[DataObjectMethod(DataObjectMethodType.Insert)],[DataObjectMethod(DataObjectMethodType.Select)],[DataObjectMethod(DataObjectMethodType.Update)],[DataObjectMethod(DataObjectMethodType.Delete)]
3、web層使用ObjectDataSource展現數據,ObjectDataSource就相當於一個代理。ObjectDataSource只是查找具有匹配的參數名稱的方法,它不會使用參數的 Type 或 Size,而只是對參數的名稱進行匹配
4、其它
·<asp:Parameter />有ConvertEmptyStringToNull屬性,默認是true。另外還有Direction屬性
·注意<asp:BoundField />的這幾個屬性NullDisplayText,HtmlEncode,ApplyFormatInEditMode,InsertVisible,DataFormatString,ReadOnly
·DataKeyNames有多個值的話用“,”分隔,用<asp:ControlParameter />綁定的話給其加一個“PropertyName”屬性,值類似如下“SelectedDataKey.Values[0]”
·關於綁定:簡單屬性<%# custID %>;集合<asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">;表達式<%# ( customer.FirstName + " " + customer.LastName ) %>;方法<%# GetBalance(custID) %>
·<%# Eval("field1") %> 和 <%# Bind("field1") %>,Eval是單向綁定,Bind是雙向邦定
·<asp:ObjectDataSource />有一個OldValuesParameterFormatString屬性一般不用,不過如果要處理樂觀並發之類的就會用到。當該屬性的值為“original_{0}”的時候“original_參數名”則為初始值
·還有一些如編程方式給參數賦值,錯誤處理,得到返回值之類的請看源碼
示例
相關存儲過程和數據層略,見源碼
單例模式的實現