本文介紹在GridView中使用DropDownList模板列時,DropDownList從數(shù)據(jù)庫主鍵表顯示數(shù)據(jù),并雙向綁定外鍵的問題。
數(shù)據(jù)庫TestDB中表結(jié)構(gòu)如下:
班級表 Class(ClassID,ClassName)
ClassID | ClassName |
1 | 一班 |
2 | 二班 |
3 | 三班 |
4 | 四班 |
學生表 Student(StuID,StuName,ClassID)
StuID | StuName | ClassID |
1 | 張三 | 1 |
2 | 李四 | 1 |
3 | 王五 | 2 |
4 | 趙六 | 2 |
其中在Student.ClassID上建立外鍵約束,參照主鍵為Class.ClassID。
創(chuàng)建視圖view_Student
Create View view_Student As
SELECT dbo.Student.StuID, dbo.Student.StuName, dbo.Student.ClassID,
dbo.Class.ClassName
FROM dbo.Student INNER JOIN
dbo.Class ON dbo.Student.ClassID = dbo.Class.ClassID
本文要解決的問題是,將學生姓名和班級顯示到GridView中(取自視圖),在點“編輯”按鈕進入編輯狀態(tài)后,班級列使用DropDownList將Class表中的所有班級名稱顯示出來,修改學生姓名和選擇班級后,選擇“更新”按鈕可以更新Student表中的數(shù)據(jù)。效果如下圖所示。
(1) 新建一個ASP.NET網(wǎng)站,并新建GVTemplate.aspx網(wǎng)頁。
(2) 在網(wǎng)頁中拖入一個GridView,然后選擇數(shù)據(jù)源為“<新建數(shù)據(jù)源…>”。
(3) 選擇數(shù)據(jù)源類型為數(shù)據(jù)庫,數(shù)據(jù)源ID使用默認的SqlDataSource1,確定。
(4) 在數(shù)據(jù)庫連接中,選擇“新建連接”按鈕,彈出新建連接的對話框。
(5) 服務(wù)器名輸入“localhost”,選擇前面創(chuàng)建的表和視圖所在的數(shù)據(jù)庫,我的是TestDB,確定。
(6) 點擊“下一步”按鈕,將連接字符串存放在配制文件中,名字取默認的“TestDBConnectionString”,下一步。
(7) 在配制Select語句界面,選擇“指定自定義SQL語句或存儲過程”,下一步。
(8) 出現(xiàn)的“定義自定義語句或存儲過程”對話框中,上面有四個選項卡,分別是Select、Insert、Update和Delete,本例我們只顯示和修改,因此只填寫Select和Update語句。
(9) 選擇Select選項卡,輸入語句:SELECT view_Student.* FROM view_Student。該語句從視圖中選擇數(shù)據(jù)。
(10) 選擇Update選項卡,輸入語句:UPDATE Student SET StuName = @StuName, ClassID = @ClassID WHERE (StuID = @original_StuID)。該語句修改表Student的StuName和ClassID。
(11) 選擇“下一步”,然后點“完成”按鈕,這樣就創(chuàng)建了綁定的數(shù)據(jù)源。
(12) 選中新創(chuàng)建的數(shù)據(jù)源“SqlDataSource1”,找到其OldValuesParameterFormatString屬性,將屬性值修改為original_{0}。這樣在編輯狀態(tài)選擇“更新”時,Update語句中的@original_StuID就會取更新前舊值,而@StuName和@ClassID會取輸入的新值。
(13) 選擇GridView,確認其DataKeyNames屬性的值為StuID。
(14) 將GridView的AutoGenerateEditButton屬性設(shè)置為true,為GridView增加編輯按鈕。
(15) 找到GridView的Columns屬性,點擊后面的“…”按鈕,彈出“字段”對話框。
(16) 在“選定的字段”列表框中,只保留StuName列,其它列刪除,并將該列的HeaderText屬性改為“姓名”。
(17) 在“可用字段”列表中,選擇最下面的TemplateField,選擇“添加”按鈕,這樣就將一個模板列加入到了選定的字段中,將其HeaderText屬性改為“班級”,確定。
(18) 在GridView上點右鍵,選擇“編輯模板/Column[1]-班級”菜單,進入模板列編輯模式,本例需要修改的是ItemTemplate和EditItemTemplat。
(19) 從工具箱拖一個label到ItemTemplate中,該Label用于在瀏覽模式下顯示班級名稱。
(20) 在此Label上點擊右鍵,選擇“編輯DataBindings”菜單,選中可綁定屬性中的“Text”,然后在右邊的“綁定到”中選擇“ClassName”,確定。
(21) 從工具箱拖一個DropDownList到EditItemTemplate中,然后選擇“選擇數(shù)據(jù)源…”菜單,彈出的選擇數(shù)據(jù)源對話框中,按照前面所述新建一個數(shù)據(jù)源,此數(shù)據(jù)源只需輸入Select語句:SELECT Class.* FROM Class,其它三個語句不必輸入。
(22) 新建數(shù)據(jù)源完成后,在“選擇數(shù)據(jù)源”的最后一步,將“DropDownList中顯示的字段”選擇為“ClassName”,“DropDownList值選擇的字段”為“ClassID”,確定。
(23) 然后選擇DropDownList的“編輯DataBings”,選擇可綁定屬性“SelectedValue”,綁定到ClassID,注意“雙向數(shù)據(jù)綁定”項前要打上勾,確定。
(24) 結(jié)束模板編輯,運行,點擊某行的編輯按鈕察看結(jié)果,然后選擇另外的班級后,選擇更新按鈕,察看結(jié)果。