asp.net|進階|技巧
1.簡單資料繫結定
<!--ASP.NET 1.x data binding expression -->
<%# DataBinder.Eval(Container.DataItem, "Price") %>
<!--Equivalent ASP.NET 2.0 data binding expression -->
<%# Eval("Price") %>
<!--XML data binding -->
<%# XPath("Price") %>2.資料來源控制項
控制項名 控制項描述
SqlDataSource 一切支援SQL語句的資料來源控制項
AccessDataSource Access資料來源控制項
XmlDataSource XML資料來源控制項
ObjectDataSource 自行編寫組件的資料來源控制項
SiteMapDataSource 頁面導航控制項的資料來源控制項 2.1 SqlDataSource關鍵屬性
名稱 描述
ConnectionString 串連資料庫的連接字串
SelectCommand 用於執行查詢的命令
InsertCommand 用於執行插入的命令
UpdateCommand 用於執行更新的命令
DeleteCommand 用於執行刪除的命令
DataSourceMode 指定資料來源類型是DataSet 或DataReader( 預設值= DataSet)
ProviderName 指定供應商(預設值= SQL Server .NET provider) 2.2 SqlDataSource 支援通過以下屬性進行資料緩衝
屬性名稱 描述
EnableCaching 指定是否開啟緩衝(預設值= false)
CacheDuration 指定結果被緩衝多少妙
CacheExpirationPolicy 指定緩衝間隔是sliding 還是absolute
CacheKeyDependency 使緩衝依賴於一個特定索引值
SqlCacheDependency 使緩衝依賴於一個特定資料庫實體2.3 參數化命令 XxxParameter 類型指定參數來源
名稱 描述
SelectParameters 為查詢命令指定參數
InsertParameters 為插入命令指定參數
UpdateParameters 為更新命令指定參數
DeleteParameters 為刪除命令指定參數
FilterParameters 為過濾器命令指定參數2.4 XxxParameter 類型
名稱 描述
ControlParameter 指定一個源自於控制項的參數
CookieParameter 指定一個源自於cookie的參數
FormParameter 指定一個源自於表單的參數
ProfileParameter 指定一個源自於profile的參數
QueryStringParameter 制定於一個來源於查詢字串的參數
Parameter 為資料來源綁定一個參數
SessionParameter 指定一個源自於session的參數2.5 使用ControlParameter例子 <asp:SqlDataSourceID="Countries" RunAt="server"
ConnectionString="server=localhost;database=northwind;"
SelectCommand="select distinct country from customers order by country" />
<asp:SqlDataSourceID="Customers" RunAt="server"
ConnectionString="server=localhost;database=northwind;"
SelectCommand="select * from customers where country =@Country">
<SelectParameters>
<asp:ControlParameterName="Country" ControlID="MyDropDownList"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownListID=" MyDropDownList" DataSourceID="Countries"
DataTextField="country" AutoPostBack="true" RunAt="server" />
<asp:DataGridDataSourceID="Customers" RunAt="server" />2.7 調研預存程序例子
<asp:SqlDataSourceID="Countries" RunAt="server"
ConnectionString="server=localhost;database=northwind;"
SelectCommand="proc_GetCountries" />
<asp:SqlDataSourceID="Customers" RunAt="server"
ConnectionString="server=localhost;database=northwind;"
SelectCommand="proc_GetCustomers">
<SelectParameters>
<asp:ControlParameterName="Country" ControlID="MyDropDownList"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownListID="MyDropDownList" DataSourceID="Countries"
DataTextField="country" AutoPostBack="true" RunAt="server" />
<asp:DataGridDataSourceID="Customers" RunAt="server" />
CREATE PROCEDURE proc_GetCustomers
@Country nvarchar(32) AS
SELECT * FROM Customers
WHERE Country = @Country
GO
CREATE PROCEDURE proc_GetCustomers
CREATE PROCEDURE proc_GetCountriesAS
SELECT DISTINCT Country
FROM Customers
ORDER BY Country
GO3.XmlDataSource 使用XML 作為資料來源
支援緩衝與XSL 轉換,只支援查詢繫結,不支援更新
<asp:XmlDataSourceID="Rates" DataFile="Rates.xml" RunAt="server" />
<asp:TreeViewID="MyTreeView" DataSourceID="Rates" RunAt="server" />3.1 XmlDataSource的關鍵屬性
名稱 描述
DataFile XML 資料檔案的路徑
TransformFile 含有XSL 風格定義的資料檔案路徑
EnableCaching 指定是否開啟cache (預設值= false)
XPath XPath 運算式用來確認資料
CacheDuration 以秒為單位的時間間隔
CacheExpirationPolicy 指定時間間隔是sliding 還是absolute
CacheKeyDependency 建立緩衝依存於某個鍵
4. ObjectDataSource
從資料群組件綁定資料,提供中介軟體的資料繫結,使資料訪問和UI脫離,兩種資料繫結方式
SelectMethod, InsertMethod, UpdateMethod,and DeleteMethod
可選擇是否使用緩衝,可選擇是否使用參數
4.1 ODS 關鍵屬性
ODS 關鍵屬性
名稱 描述
InsertParameters 指定插入方法參數
UpdateParameters 指定更新方法參數
DeleteParameters 指定刪除方法參數
SelectParameters 指定查詢方法參數
CacheDuration 緩衝間隔時間以秒為單位
SqlCacheDependency 基於某個資料實體的緩衝
建立和清除
ObjectDataSource.SelectMethod 可以使用靜態方法也可以使用一個類的新執行個體
如果使用執行個體方法:ODS 在每次調用的時候建立一個新執行個體類必須具有公用的建構函數
使用ObjectCreated 和ObjectDisposing 元素可以初始化和撤銷函數5.增強DataGrid 控制項
支援複雜的資料儲存格類型,包括CheckBoxFields在<Columns> 元素中聲明高可定製的使用者介面
gridView 列類型:
名稱 描述
BoundField 顯示資料庫中取出的文本
ButtonField 顯示按鈕
CheckBoxField 使用check boxes顯示一個boolean型變數
HyperLinkField 顯示一個超連結
TemplateField 顯示一個自訂的HTML模板
CommandField 顯示一個查詢或者編輯按鈕
ImageField 顯示一個圖片6. 衝突判定
先入勝利
如果資料在取出之後被改變,則修改失敗
UpdateCommand結構構成指定ConflictDetection=“CompareAllValues”來實現
後入勝利
無論資料是否被修改,該修改都會成功
UpdateCommand結構構成指定ConflictDetection=“OverwriteChanges”來實現6.1 先入勝利法則更新
<asp:SqlDataSourceID="Employees" RunAt="server"
ConnectionString="server=localhost;database=northwind;"
SelectCommand="select employeeid, lastname, firstnamefrom employees"
UpdateCommand="update employees set lastname=@lastname, firstname=
@firstnamewhere employeeid=@original_employeeid and lastname=
@original_lastnameand firstname=@original_firstname"
ConflictDetection="CompareAllValues">
<UpdateParameters>
<asp:ParameterName="EmployeeID" Type="Int32" />
<asp:ParameterName="lastname" Type="String" />
<asp:ParameterName="firstname" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:GridViewDataSourceID="Employees" Width="100%" RunAt="server"
DataKeyNames="EmployeeID" AutoGenerateEditButton="true" />7.錯誤偵測
資料更新後控制項調用的事件GridView.RowUpdated,DetailsView.ItemUpdated,SqlDataSource.Updated, etc.
處理“status”的事件,無論資料庫是否異常允許資料庫異常被處理或者再次拋棄,顯示多少資料庫行被修改
處理更新錯誤
<asp:SqlDataSourceID="Employees" RunAt="server"
UpdateCommand="" OnUpdated="OnUpdateComplete">
</asp:SqlDataSource>
void OnUpdateComplete (Object source, SqlDataSourceStatusEventsArgse)
{
if (e.Exception!= null) {
// Exception thrown. Set e.ExceptionHandledto true to prevent
// the SqlDataSourcefrom throwing an exception, or leave it set
// to false to allow SqlDataSourceto rethrowthe exception
}
else if (e.AffectedRows== 0) {
// No exception was thrown, but no records were updated,either.
// Might want to let the user know that the update failed
}
}