国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET立即上手教程 10

2024-07-10 12:56:33
字體:
供稿:網(wǎng)友

在sql數(shù)據(jù)庫中更新數(shù)據(jù)
在web應用程序中更新數(shù)據(jù)庫常常是一件棘手的事情。datagrid控件提供了一些內(nèi)建的支持
,使得更新數(shù)據(jù)庫變得容易。要想編輯行記錄,datagrid支持一個整數(shù)類型的edititemin
dex屬性,他用來指明表格控件的哪一行是可編輯的。當設(shè)定該屬性之后,datagrid中對應
的行用輸入框來代替標簽。值-1表示沒有可編輯的行。asp.net頁面可以在服務(wù)器端表單中
包含datagrid控件,通過datagrid控件的對象模型來訪問可編輯的數(shù)據(jù)。
為了判斷哪一行將被編輯,你需要接收一些用戶的輸入,以此來判斷他們將編輯哪一行。
datagrid可以包含editcommandcolumn屬性,它提供了一個連接,用以激活三個特定的事件
:editcommand、updatecommand、和cancelcommand。editcommandcolumn被加在datagrid
的列集合中,如下面的例子所示:
...
oneditcommand="mydatagrid_edit"
oncancelcommand="mydatagrid_cancel"
onupdatecommand="mydatagrid_update"
datakeyfield="au_id"
>
在datagrid標簽上,可以綁定每一個從editcommandcolumn激活的命令事件句柄。這些句柄
的datagridcommandeventargs參數(shù)可以讓你直接訪問從客戶端選擇的可編輯行索引值。注
意,為了使更改生效,你需要重新綁定datagrid,像下面的例子這樣:
public void mydatagrid_edit(object sender, datagridcommandeventargs e) {
mydatagrid.edititemindex = (int)e.item.itemindex;
bindgrid();
}
當編輯datagrid中的行的時候,editcommandcolumn提供了可供使用的兩個連接:update
和 cancel。如果客戶端選擇了cancel,你只需將edititemindex設(shè)置為-1。如果客戶端選
擇了update,你需要對數(shù)據(jù)庫執(zhí)行你的更新命令。執(zhí)行更新命令的時候,你需要知道被編
輯行在數(shù)據(jù)庫中對應記錄的主鍵。為了支持這個功能,datagrid提供了一個datakeyfield
屬性,可以用來設(shè)置主鍵對應的字段。在綁定到updatecommand的事件句柄中,你可以從d
atagrid的數(shù)據(jù)鍵集合取得鍵的名稱。你可以使用事件的itemindex來索引集合,像下面的
例子:
mycommand.parameters["@id"].value = mydatagrid.datakeys[(int)e.item.itemindex]
;
;
在更新事件句柄結(jié)束以后,將edititemindex設(shè)置為-1。下面的例子演示了這種情況。
c# datagrid6.aspx
[運行] | [源代碼] 前面的例子中有一個問題,那就是當編輯一行的時候,主鍵字段(au
_id)也提供了一個文本輸入框。因為需要這個值來確定數(shù)據(jù)庫中的哪一行記錄被更新,所
以你可能不希望客戶端改變這個值。幸運的是,你可以通過詳細指定每一個可編輯行的外
觀,來禁止該列提供文本輸入框。具體方法是使用boundcolumn控件來分配每一列的數(shù)據(jù)字
段,在datagrid的列集合定義每一行。使用這種技術(shù)可以實現(xiàn)列的完全控制,當然也包括
readonly屬性。對于au_id列,你可以設(shè)置它的readonly屬性為true。這樣,當一行處于編
輯模式的時候,au_id列依然顯示為一個文本標簽,而不是文本輸入框。下面的例子演示了
這種技術(shù)。
c# datagrid7.aspx
[運行] | [源代碼] boundcolumn控件并非datagrid的列集合中可以設(shè)置屬性的唯一控件。
你也可以指定templatecolumn,它對列的內(nèi)容提供了完全的控制。模板對內(nèi)容的顯示更具
有隨意性,你可以在datagrid的列中提供你喜歡的任何控件,也包括服務(wù)器端控件。下面
的例子演示了如何使用templatecolumn,對"state"列使用下拉列表服務(wù)器控件,對"cont
ract"列使用復選框html控件。asp.net數(shù)據(jù)綁定語法用于在模板中輸出數(shù)據(jù)字段的值。注
意在編輯行中映射下拉列表和復選框到的state時候有一點小技巧。
c# datagrid8.aspx
[運行] | [源代碼]
如同在templatecolumn中放置下拉列表框或者復選框一樣,你也可以在其中放置其他控件
。下面的例子中,添加了一個validator驗證控件,在執(zhí)行更新之前檢查客戶端的輸入。
c# datagrid9.aspx
[運行] | [源代碼]
在sql數(shù)據(jù)庫中刪除數(shù)據(jù)
從數(shù)據(jù)庫中刪除記錄非常類似于更新或者插入命令,但是你依然需要確定表格中要刪除的
特定行??梢蕴砑拥絛atagrid列中的另一個控件是buttoncolumn,它僅僅提供了一個按鈕
控件。buttoncolumn支持一個commandname屬性,可以設(shè)置為“delete”。在datagrid上,
當你執(zhí)行刪除操作的時候,需要對deletecommand綁定一個事件句柄。此外,你需要使用數(shù)
據(jù)鍵(datakeys)集合來確定客戶端選定的行。下面的例子演示了這一過程:
c# datagrid10.aspx
[運行] | [源代碼]
從sql數(shù)據(jù)庫中排序
對于任何表格來說,常常要求它對所包含的數(shù)據(jù)具有排序的能力。然而,datagrid控件本
身并不具有數(shù)據(jù)排序的功能。它通過用戶單擊要對數(shù)據(jù)排序的列標題,調(diào)用事件句柄。當
datagrid的 allowsorting屬性被設(shè)置為true,datagrid就為列標題提供了一個超鏈接,用
以對表格激活sort命令。你可以給datagrid的onsortcommand屬性設(shè)置句柄,來處理用戶的
單擊。列的名字作為sortexpression 的屬性,傳遞給datagridsortcommandeventargs的參
數(shù)。該參數(shù)可以用來設(shè)置綁定到表格的dataview的sort屬性。請看下面的代碼和例子。
c# datagrid11.aspx
[運行] | [源代碼]
當你使用boundcolumn控件的時候,可以明確地為每一列設(shè)置sortexpression屬性,就象下
面的實例
c# datagrid12.aspx
[運行] | [源代碼]
運用主-從關(guān)系
常常有這樣的情況:數(shù)據(jù)模型包含的關(guān)系不能僅僅通過一個表格來表現(xiàn)。很多時候,在基
于web的界面中,用戶選擇數(shù)據(jù)中的某一行(通常是標題),然后重新定位到“細節(jié)”頁面
(通常是內(nèi)容),顯示用戶所選行的詳細信息。為了使用datagrid來完成這個工作,需要
添加hyperlinkcolumn到列集合。hyperlinkcolumn指定當用戶單擊超連接的時候?qū)⒁匦?br>定向的細節(jié)頁面。你可以在這個超鏈接中使用格式化字符串語法提交字段值,字段值作為
get方式提交字符串的參數(shù)。下面的例子演示了這一過程。
datanavigateurlfield="au_id"
datanavigateurlformatstring="datagrid13_details.aspx?id={0}"
text="get details"
/>
在細節(jié)頁面中,可以取得提交字符串的參數(shù),并且執(zhí)行一個聯(lián)合(join)查詢語句,從數(shù)據(jù)
庫中獲取詳細信息。參閱下面的例子:
c# datagrid13.aspx
[運行] | [源代碼]
書寫和使用存儲過程
一般來說,執(zhí)行特定的查詢可以取得不同的執(zhí)行性能。使用存儲過程可以降低應用程序中
數(shù)據(jù)庫的負荷。存儲過程很容易創(chuàng)建,甚至可以使用sql語句來創(chuàng)建。下面的代碼建立了一
個簡單的返回一個表的存儲過程:
create procedure getauthors as
select * from authors
return
go
你也可以建立一個可以接受參數(shù)的存儲過程,例如:
create procedure loadpersonalizationsettings (@userid varchar(50)) as
select * from personalization where [email protected]
return
go
從asp.net頁面中使用存儲過程不過是sqlcommand對象的擴展。commandtext是用來代替特
定查詢文本的存儲過程的名字。你可以通過設(shè)定commandtype的屬性來指定sqlcommand的c
ommandtext為存儲過程。
mycommand.selectcommand.commandtype = commandtype.storedprocedure;
下面的例子演示了調(diào)用存儲過程來填充dataset。
c# datagrid14.aspx
[運行] | [源代碼]
存儲過程的參數(shù)傳遞過程和特定的查詢一樣,請看下面的例子:
c# datagrid15.aspx
[運行] | [源代碼]
c# datagrid16.aspx
[運行] | [源代碼]
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 容城县| 合水县| 岢岚县| 塔河县| 美姑县| 三明市| 仪征市| 襄城县| 天津市| 荣昌县| 肇庆市| 三都| 永春县| 金沙县| 陵川县| 灌云县| 什邡市| 察哈| 务川| 新丰县| 包头市| 伊金霍洛旗| 珲春市| 岱山县| 通化市| 左权县| 康马县| 宜昌市| 梨树县| 绥宁县| 怀柔区| 甘洛县| 清涧县| 鱼台县| 宁南县| 于都县| 普陀区| 昔阳县| 凭祥市| 蒙阴县| 丁青县|