ASP.NET立即上手教程(10)_.Net教程
推薦:ASP.NET立即上手教程(9)服務器端數據介紹 數據訪問是現實世界中應用程序的核心內容。Asp.net提供了一套豐富的控件,他與CLR(通用語言運行庫)提供的用來管理數據訪問的APIs(應用程序接口)緊密結合。本章預排幾個
在SQL數據庫中更新數據
在web應用程序中更新數據庫常常是一件棘手的事情。DataGrid控件提供了一些內建的支持,使得更新數據庫變得容易。要想編輯行記錄,DataGrid支持一個整數類型的EditItemIndex屬性,他用來指明表格控件的哪一行是可編輯的。當設定該屬性之后,DataGrid中對應的行用輸入框來代替標簽。值-1表示沒有可編輯的行。Asp.net頁面可以在服務器端表單中包含DataGrid控件,通過DataGrid控件的對象模型來訪問可編輯的數據。
為了判斷哪一行將被編輯,你需要接收一些用戶的輸入,以此來判斷他們將編輯哪一行。DataGrid可以包含EditCommandColumn屬性,它提供了一個連接,用以激活三個特定的事件:EditCommand、UpdateCommand、和CancelCommand。EditCommandColumn被加在DataGrid的列集合中,如下面的例子所示:
以下為引用的內容: <ASP:DataGrid id="MyDataGrid" runat="server" <Columns> </ASP:DataGrid> |
在DataGrid標簽上,可以綁定每一個從EditCommandColumn激活的命令事件句柄。這些句柄的DataGridCommandEventArgs參數可以讓你直接訪問從客戶端選擇的可編輯行索引值。注意,為了使更改生效,你需要重新綁定DataGrid,像下面的例子這樣:
以下為引用的內容: public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E) { MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex; BindGrid(); } |
當編輯DataGrid中的行的時候,EditCommandColumn提供了可供使用的兩個連接:Update 和 Cancel。如果客戶端選擇了cancel,你只需將EditItemIndex設置為-1。如果客戶端選擇了Update,你需要對數據庫執行你的更新命令。執行更新命令的時候,你需要知道被編輯行在數據庫中對應記錄的主鍵。為了支持這個功能,DataGrid提供了一個DataKeyField屬性,可以用來設置主鍵對應的字段。在綁定到UpdateCommand的事件句柄中,你可以從DataGrid的數據鍵集合取得鍵的名稱。你可以使用事件的ItemIndex來索引集合,像下面的例子:
myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[(int)E.Item.ItemIndex];
在更新事件句柄結束以后,將EditItemIndex設置為-1。下面的例子演示了這種情況。
前面的例子中有一個問題,那就是當編輯一行的時候,主鍵字段(au_id)也提供了一個文本輸入框。因為需要這個值來確定數據庫中的哪一行記錄被更新,所以你可能不希望客戶端改變這個值。幸運的是,你可以通過詳細指定每一個可編輯行的外觀,來禁止該列提供文本輸入框。具體方法是使用BoundColumn控件來分配每一列的數據字段,在DataGrid的列集合定義每一行。使用這種技術可以實現列的完全控制,當然也包括ReadOnly屬性。對于au_id列,你可以設置它的ReadOnly屬性為true。這樣,當一行處于編輯模式的時候,au_id列依然顯示為一個文本標簽,而不是文本輸入框。下面的例子演示了這種技術。
BoundColumn控件并非DataGrid的列集合中可以設置屬性的唯一控件。你也可以指定TemplateColumn,它對列的內容提供了完全的控制。模板對內容的顯示更具有隨意性,你可以在DataGrid的列中提供你喜歡的任何控件,也包括服務器端控件。下面的例子演示了如何使用TemplateColumn,對"State"列使用下拉列表服務器控件,對"Contract"列使用復選框html控件。Asp.net數據綁定語法用于在模板中輸出數據字段的值。注意在編輯行中映射下拉列表和復選框到的state時候有一點小技巧。
如同在TemplateColumn中放置下拉列表框或者復選框一樣,你也可以在其中放置其他控件。下面的例子中,添加了一個Validator驗證控件,在執行更新之前檢查客戶端的輸入。
在SQL數據庫中刪除數據
從數據庫中刪除記錄非常類似于更新或者插入命令,但是你依然需要確定表格中要刪除的特定行。可以添加到DataGrid列中的另一個控件是ButtonColumn,它僅僅提供了一個按鈕控件。ButtonColumn支持一個CommandName屬性,可以設置為“Delete”。在DataGrid上,當你執行刪除操作的時候,需要對DeleteCommand綁定一個事件句柄。此外,你需要使用數據鍵(DataKeys)集合來確定客戶端選定的行。下面的例子演示了這一過程:
從SQL數據庫中排序
對于任何表格來說,常常要求它對所包含的數據具有排序的能力。然而,DataGrid控件本身并不具有數據排序的功能。它通過用戶單擊要對數據排序的列標題,調用事件句柄。當DataGrid的 AllowSorting屬性被設置為true,DataGrid就為列標題提供了一個超鏈接,用以對表格激活Sort命令。你可以給DataGrid的OnSortCommand屬性設置句柄,來處理用戶的單擊。列的名字作為SortExpression 的屬性,傳遞給DataGridSortCommandEventArgs的參數。該參數可以用來設置綁定到表格的DataView的Sort屬性。請看下面的代碼和例子。
以下為引用的內容: <script> <form runat="server"> |
當你使用BoundColumn控件的時候,可以明確地為每一列設置SortExpression屬性,就象下面的實例
C# DataGrid12.aspx
[運行] | [源代碼]
運用主-從關系
常常有這樣的情況:數據模型包含的關系不能僅僅通過一個表格來表現。很多時候,在基于web的界面中,用戶選擇數據中的某一行(通常是標題),然后重新定位到“細節”頁面(通常是內容),顯示用戶所選行的詳細信息。為了使用DataGrid來完成這個工作,需要添加HyperLinkColumn到列集合。HyperLinkColumn指定當用戶單擊超連接的時候將要重新定向的細節頁面。你可以在這個超鏈接中使用格式化字符串語法提交字段值,字段值作為get方式提交字符串的參數。下面的例子演示了這一過程。
以下為引用的內容: <ASP:DataGrid id="MyDataGrid" runat="server"> <Columns> <asp:HyperLinkColumn DataNavigateUrlField="au_id" DataNavigateUrlFormatString="datagrid13_details.aspx?id={0}" Text="Get Details" /> </Columns> </ASP:DataGrid> |
在細節頁面中,可以取得提交字符串的參數,并且執行一個聯合(join)查詢語句,從數據庫中獲取詳細信息。參閱下面的例子:
書寫和使用存儲過程
一般來說,執行特定的查詢可以取得不同的執行性能。使用存儲過程可以降低應用程序中數據庫的負荷。存儲過程很容易創建,甚至可以使用SQL語句來創建。下面的代碼建立了一個簡單的返回一個表的存儲過程:
以下為引用的內容: CREATE Procedure GetAuthors AS SELECT * FROM Authors return GO |
你也可以建立一個可以接受參數的存儲過程,例如:
以下為引用的內容: CREATE Procedure LoadPersonalizationSettings (@UserId varchar(50)) AS SELECT * FROM Personalization WHERE UserID=@UserId return GO |
從ASP.NET頁面中使用存儲過程不過是SqlCommand對象的擴展。CommandText是用來代替特定查詢文本的存儲過程的名字。你可以通過設定CommandType的屬性來指定SqlCommand的CommandText為存儲過程。
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
下面的例子演示了調用存儲過程來填充DataSet。
分享:ASP.NET立即上手教程(7)Web Forms 用戶控件 用戶控件介紹 除了ASP.NET提供的內建的服務器控件外,你還可以使用已經掌握的制作WEB FORMS 頁面的技術,輕松的定義自己的控件。實際上,只需要稍微改動一下,幾乎任何W
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發送Email實例(可帶附件)
- js實現廣告漂浮效果的小例子
- asp.net Repeater 數據綁定的具體實現
- Asp.Net 無刷新文件上傳并顯示進度條的實現方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)
- asp.net頁面傳值測試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-ASP.NET立即上手教程(10)。