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