Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 12 T-SQL 語法與 ASP.NET.

Similar presentations


Presentation on theme: "Chapter 12 T-SQL 語法與 ASP.NET."— Presentation transcript:

1 Chapter 12 T-SQL 語法與 ASP.NET

2 本章提要 12 - 1 T-SQL 語法基礎 12 - 2 資料來源控制項的查詢設定 12 - 3 查詢多個資料表
自訂資料來源的編輯與刪除功能

3 T-SQL 語法與 ASP.NET 前一章我們介紹了如何使用資料繫結技術來瀏覽資料庫中的資料, 本章將進一步說明如何結合 T-SQL 查詢語法時, 讓網頁能依需要顯示特定的資料;以及更多的資料控制項設計技巧。

4 T-SQL 語法基礎 在關聯式資料庫的世界中, 用來存取資料庫的語法是結構化查詢語言 SQL (Structured Query Language) 。 標準組織 ISO / ANSI 早已制定出 SQL 語言標準, 但各資料庫管理系統廠商在實作其產品所用的 SQL 語言時, 都是在各自的產品架構下, 設計出『儘量』符合 SQL 標準的自家語言, 因此各資料庫管理系統所支援的 SQL 語言都不太一樣, 例如微軟公司的 SQL Server 所使用的是 Transact-SQL (簡稱 T-SQL)。

5 T-SQL 語法基礎 當我們用資料來源控制項連接資料庫時, 就會設定向資料庫取得所需資料的 T-SQL 語法, 只不過前一章介紹時都是以圖形介面撰擇所要查詢的資料表及欄位、由 VWD 自動替我們產生合適的 T-SQL 查詢敘述, 而網頁在執行時, 即是利用此查詢敘述向資料庫進行查詢, 資料庫則將查詢結果傳回。

6 T-SQL 語法基礎

7 T-SQL 語法基礎 除了單純查詢整個資料表的所有欄位或是部分欄位外, 我們也可只查詢符合特定條件的資料, 這些都可透過適當的 T-SQL 語法來達到, 像是同時擷取兩個資料表的內容, 並整合在一起...等。 雖然 VWD 提供了友善的工具幫助我們建立 T-SQL 查詢敘述的內容, 減少我們需動手自行輸入查詢敘述的必要。

8 T-SQL 語法基礎 但 VWD 畢竟不是萬能, 有些特別的語法仍需手動輸入;再者有時候僅是要做小小的修改, 也不必動用到 VWD 的精靈, 因此若能熟悉 T-SQL 的基本語法, 對於設計資料庫相關的網頁時將會更有幫助。

9 學習 T-SQL 語法的練習網頁 為測試及練習稍後的 T-SQL 語法, 我們先建立一個練習專用的網頁。
這個網頁包含一個 SqlDataSource 控制項及 GridView 控制項, 但並不完全採用前一章的建立方式: SqlDataSource 控制項:只設定連接字串, 但不設定查詢語法, 換言之其 SelectCommand 屬性是空白的 (您也可依前一章的方式設妥控制項後, 再將此屬性清空):

10 學習 T-SQL 語法的練習網頁

11 學習 T-SQL 語法的練習網頁 GridView 控制項:雖設定繫結上述的 SqlDataSource 控制項, 但因資料來源控制項未設定查詢敘述, 即無法取得資料, 所以 GridView 控制像也無法取得細節的欄位資訊。

12 學習 T-SQL 語法的練習網頁

13 學習 T-SQL 語法的練習網頁 另外我們再加入一個用來輸入查詢敘述的 TextBox 欄位及 Button 按鈕:

14 學習 T-SQL 語法的練習網頁 按下按鈕時, 程式即會將輸入至 TextBox 的字串當成查詢敘述設定給 SqlDataSource 控制項的 SelectCommand 屬性, 讓查詢結果立即顯示出來:

15 學習 T-SQL 語法的練習網頁

16 學習 T-SQL 語法的練習網頁 在練習時可能會因輸入不合法的 T-SQL 敘述而引發例外, 所以我們特別將主要的程式放在 Try / Catch 結構中。 當控制項因 T-SQL 語法錯誤而引發例外時, 即會輸出相關錯誤內容:

17 學習 T-SQL 語法的練習網頁 第 16 行的程式將 GridView 設為隱藏, 只是為避免在發生例外時, 網頁上不會仍留有前一次練習所留下來的資料。

18 SELECT 語法 SQL 語言的查詢敘述為 SELECT (SQL 語言不分大小寫), 前面提過各廠商實作的自家 SQL 語法都不儘相同, 但在 SELECT 的部份倒是都差不多。 因為本章以使用 SQL Server 資料庫為主, 所以此處也以 T-SQL 語法為主, TSQL 的 SELECT 語法如下:

19 SELECT 語法 這個最基本的語法其實在前一章範例已看過其用法, 資料表名稱就是來源資料庫中的資料表名稱, 通常為方便辨識, 會在名稱前後加上 [...] 方括號。 欄位名稱的部份就是直接列出要查詢的任何欄位名稱, 要查詢多個欄位名稱時, 其間需以逗號 (,) 分開, 而且也可加上方括號 (非必要):

20 SELECT 語法

21 SELECT 語法 若要查詢資料表中的所有欄位, 則可用 * 或 ALL 來 代表:

22 SELECT 語法 此外, 欄位名稱前可加上『資料表名稱.』的語法, 明確表示此欄位是存於哪一個資料表:

23 別名 指定欄位名稱可使用別名 (Alias), 使用別名就是讓查詢所得的資料中, 欄位名稱換成別名顯示, 而非該欄位原本在資料表中的名稱。指定別名時的語法如下: 例如下面的例子, 就是用別名讓欄位名稱都變成英文:

24 別名

25 別名 SELECT 敘述也可一次查詢多個資料表, 以取得來自不同資料表的相關資料欄位, 在本章稍後會進一步說明此種用法。

26 自訂欄位 列在 SELECT 後面的欄位也可以是資料表中沒有的欄位, 我們可用『欄位名稱 = 運算式』的方式, 動態產生此自訂欄位的資料。
例如在 [書籍] 資料表中有個『單價』欄位, 而我們可將它乘上折數後產生折扣價的自訂欄位:

27 自訂欄位 執行結果如下:

28 T-SQL 的函數 T-SQL 和一般程式語言一樣, 內建了許多常用的資料處理、計算、統計函數 (Function), 這些函式都能應用在查詢敘述中, 以便對資料做進一步的處理, 再將結果傳回。 例如 COUNT() 是個統計資料共有幾筆的函數, 而以下的查詢敘述, 即可查詢『書籍』資料表中有幾本書籍:

29 T-SQL 的函數 對各 T-SQL 函數的功能、用法有興趣者, 請參考 T-SQL 相關書籍。

30 WHERE 子句 在基本的 SELECT 查詢後面可加上多種子句 (Clause) 來限制查詢的範圍, 其中最常見的子句之一就是 WHERE 子句, 其功用是設定查詢的條件, 語法如下:

31 WHERE 子句 條件的表示方式就和 Visual Basic 在 If、While 之類的敘述中所用的條件運算式相似, 可用各種比較運算子 (>、=、< 等, 後詳) 來限制查詢的條件。 例如要查詢『單價』為 299 元的書籍之名稱, 則條件即為『單價 = 299』, 所以查詢敘述可寫成:

32 WHERE 子句

33 比較與邏輯運算子 使用 WHERE 子句時, 通常要運用 T-SQL 的比較與邏輯運算子來建立各種條件。T-SQL 的比較運算子有下列九種, 其用法很直覺, 就不個別說明:

34 比較與邏輯運算子 T-SQL 的邏輯運算子則多達十種, 以下簡單介紹其中較常見的數種: AND、OR、NOT BETWEEN LIKE

35 AND、OR、NOT 也就是『且』、『或』、『否』的意思, 利用這 3 個運算子, 可組合出複雜的條件, 例如:

36 BETWEEN 和字面的意思一樣, 用以設定某個範圍的條件, 兩個範圍值間要用 AND 連接, 例如:

37 BETWEEN 上例的 WHERE 條件也可寫成『單價 > = 200 AND 單價 < = 499』, 意思相同。

38 LIKE 可用以指定要查詢的欄位中所含的『部份』內容, 其語法為『LIKE '比對字串'』, 比對字串中可使用以下特殊字元:
%:代表零或多個任意字元, 例如 'SQL%' 即表示以 'SQL' 開頭的任何字串;而 '%SQL%' 則表示任何包含有 'SQL' (不論位置) 的字串。

39 LIKE

40 LIKE _:代表一個任意字元, 例如 ‘S_ _ ’ 表示任何以 ‘S’ 開頭、長度為 3 個字 (開頭的 S 再加兩個任意字元) 的字串 (中英元字元都算一個字)。

41 LIKE

42 LIKE [ ]:方括號中可放任何字元或範圍, 代表符合方括號所列的任何字元, 例如 ‘[ABC]%’ 表示任何以 A 或 B 或 C 開頭的字串。 方括號若加入 ^ 符號, 則表示相反的意思, 例如 '[^ABC]%' 表示任何不是以 A、B、C 開頭的字串。

43 LIKE

44 ORDER BY 子句 ORDER BY 子句是用以設定傳回資料的排列順序, 雖然 GridView 可啟用排序功能, 讓瀏覽者可選擇排序方式, 但 DetailsView 和 FormView 則無此功能。 或者您想使用 GridView 顯示資料, 但只使用固定的排序方式, 此時都可用 ORDER BY 子句指定要依哪一個欄位排序, 而且還可用 ASC (升冪, 由小到大, 預設值) 或 DESC (降冪, 由大到小) 關鍵字指定排列方式:

45 ORDER BY 子句

46 ORDER BY 子句 在 ORDER BY 子句中可指定多個排列依據 (用逗號分隔), 表示當第 1 個排序條件所得的結果中有順序相同的記錄時, 可再依另一個條件排序:

47 ORDER BY 子句

48 資料來源控制項的查詢設定 SELECT 查詢語法的變化, 有部份是可直接在資料來源控制項的設定畫面中, 由 VWD 替我們自行產生, 但有時則需自行輸入。 以下我們先複習一下在資料來源控制項中的設定, 之後再介紹如何使用 VWD 提供的查詢產生器建立複雜的查詢敘述。

49 資料來源控制項的 ORDER BY 設定 在設定資料來源控制項的資料來源時, 即可選擇 ORDER BY 子句的資料排序方式。請先建立一個新的網頁 (Ch12-02.aspx), 在網頁中加入 SqlDataSource 控制項後依如下方式設定:

50 資料來源控制項的 ORDER BY 設定

51 資料來源控制項的 ORDER BY 設定

52 資料來源控制項的 ORDER BY 設定

53 資料來源控制項的 ORDER BY 設定 如上所示, 只要透過圖形介面的操作, 即可快速建立 ORDER BY 子句, 讓查詢結果自動依指定的方式排序。 在網頁中加入與之繫結的 GridView 並瀏覽網頁即可看到結果:

54 資料來源控制項的 ORDER BY 設定

55 資料來源控制項的 ORDER BY 設定 此外我們也可以模仿 Ch12-01.aspx 的技巧, 透過其它控制項設定 ORDER BY 的排序方式, 也就是在程式中修改 SqlDataSource 控制項的 SelectCommand 屬性, 在其中加上必要的 ORDER BY 子句即可, 讀者可自行測試之。

56 資料來源控制項的 WHERE 設定 和 ORDER BY 子句類似, 在設定資料來源時, 即可設定查詢時的 WHERE 子句內容。
而且 WHERE 子句的設定具有較多的變化, 例如可選擇以 Cookie 的值、Session 變數值、其它控制項的屬性值、查詢字串 (QueryString) 的值等不同參數, 當成 WHERE 的條件。

57 資料來源控制項的 WHERE 設定 例如我們可應用前面介紹的 LIKE 語法, 設計一個可用關鍵字搜尋書籍名稱的網頁。
請新增一個網頁 (以下範例為 Ch12-03.aspx), 網頁中當然要放入一個用來輸入書名關鍵字的 TextBox 控制項:

58 資料來源控制項的 WHERE 設定

59 資料來源控制項的 WHERE 設定 接著加入查詢書籍資料的 SqlDataSource 控制項, 並依 如下 方式 設定:

60 資料來源控制項的 WHERE 設定

61 資料來源控制項的 WHERE 設定

62 資料來源控制項的 WHERE 設定

63 資料來源控制項的 WHERE 設定

64 資料來源控制項的 WHERE 設定 其中主要的設定就在於 SqlDataSource 控制項的 SELECT 語法。
以上設定就是讓 SELECT 敘述加上『WHERE ([書籍名稱] LIKE ‘%’ 書籍名稱 + ‘%’)』字句, 書籍名稱這個參數的設定, 切換到原始檔模式後, 即可在 <asp:SqlDataSource> 標籤中找到:

65 資料來源控制項的 WHERE 設定

66 資料來源控制項的 WHERE 設定 第 36 行的 <asp:ControlParameter> 標籤即是用來設定參數值取自於控制項的 SELECT 參數, 此標籤中指了參數名稱為 "書籍名稱"、參數值來源的控制項為 "TextBox1"、參數值來源是該控制項的 Text 屬性、參數值資料型別為字串 (String)。 設好資料來源控制項後, 再加入 GridView 控制項, 並與資料來源控制項繫結。

67 資料來源控制項的 WHERE 設定 設定完成並存檔後, 即可瀏覽網頁。
由於在前述的步驟中未設定參數預設值, 所以初次瀏覽網頁時, 會看不到任何資料:

68 資料來源控制項的 WHERE 設定 2 按下 Enter 鍵

69 GridView 搭配 DetailsView
雖然 GridView 預設沒有插入新記錄的功能, 不過我們可以讓它搭配有插入功能的 DetailsView 使用:網頁中同時加入這兩個控制項, 當瀏覽者選擇 GridView 中某筆記錄時, 即於 DetailsView 顯示該筆記錄的全部欄位, 因此只要開啟 DetailsView 插入新記錄的功能, 瀏覽者即可加入一筆新記錄。 要做到此功能, 需在網頁中加入如下的控制項:

70 GridView 搭配 DetailsView
SqlDataSource 和與之繫結的 GridView, 可列出資料表中每一筆記錄, 且這個 GridView 必須具有選擇記錄的功能。 加入另一個 SqlDataSource, 但必須設定其查詢資料庫時, 只選出已在 GridView 中選取的記錄。 加入與第二個 SqlDataSource 繫結的 DetailsView, 並啟用後者的新增記錄功能。

71 GridView 搭配 DetailsView
請先建立一空白網頁 Ch12-04.aspx, 我們先加入查詢所有書籍的 SqlDataSource 控制項, 並將 ID 設為 “AllBooks”;然後再加入與之繫結的 GridView 控制項, 並啟用 GridView 的選取功能:

72 GridView 搭配 DetailsView

73 GridView 搭配 DetailsView

74 GridView 搭配 DetailsView

75 GridView 搭配 DetailsView

76 GridView 搭配 DetailsView

77 GridView 搭配 DetailsView

78 GridView 搭配 DetailsView

79 GridView 搭配 DetailsView

80 GridView 搭配 DetailsView

81 GridView 搭配 DetailsView

82 GridView 搭配 DetailsView

83 GridView 搭配 DetailsView
在前面的步驟中, 主要是設定當我們在 GridView 中所選擇一筆記錄時, 會使 “OnlyOneBook” 控制項也只會由資料表查詢對應記錄的全部欄位, 以便讓 DetailsView 控制項顯示該筆記錄的全部欄位。 瀏覽網頁的效果如下:

84 GridView 搭配 DetailsView

85 GridView 搭配 DetailsView

86 查詢多個資料表 參考其它資料表的查詢 查詢多個資料表

87 參考其它資料表的查詢 在關聯式資料庫中, 在做過正規化後, 經常會讓我們想知道的資料分散在多個資料表中。
例如在範例 [書籍] 資料表中有記錄書籍分類的『類別編號』欄位, 但該欄位只記錄編號, 實際書籍分類的名稱, 則另存於 [書籍類別] 資料表的『類別名稱』欄位。

88 參考其它資料表的查詢 前一節介紹過用 GridView-DetailsView 搭配顯示書籍資料的用法, 不過當時兩個控制項所用的資料來源, 都是查詢同一個資料表, 只是 SELECT 敘述的寫法不同。 在此我們則改變一下, 讓兩個資料來源控制項分別查詢 [書籍] 和 [書籍類別] 資料表, 讓瀏覽者選擇某個書籍類別時, 網頁即會列出屬於該類別的所有書籍。

89 參考其它資料表的查詢

90 參考其它資料表的查詢 如圖所示, 顯示所有書籍類別的是用 DropDownList 控制項, 它也是可用於資料繫結的控制項之一。
請先建立一空白網頁 (光碟範例 Ch12-05.aspx), 我們先在網頁中加入一個 SqlDataSource 控制項, 並將其查詢敘述設為 "SELECT * FROM [書籍分類]", 然後加入 DropDownList 控制項, 並依如下方式設定:

91 參考其它資料表的查詢

92 參考其它資料表的查詢

93 參考其它資料表的查詢 接著再加入第 2 個 SqlDataSource 控制項, 除了以我們熟悉的方式設為查詢 [書籍] 資料表的內容外, 並做如下的 WHERE 設定:

94 參考其它資料表的查詢

95 參考其它資料表的查詢 最後加入與上述資料來源繫結的 GridView 控制項 (也可改用其它資料控制項) 並存檔。
瀏覽網頁時, 預設會出現符合 DropDownList 控制項中第一項『入門』類的書籍, 選擇其它類型時, 就會即時反應出現:

96 參考其它資料表的查詢

97 查詢多個資料表 上一個例子是由 DropDownList 控制項顯示 [書籍分類] 資料表的內容, 再於資料來源控制項依其選擇的值來設定查詢 [書籍] 資料表時的篩選條件。 但在查詢資料的應用中, 也常見同時需從多個資料表取出資料, 並同時顯示出來:例如顯示書籍資料時, 『書籍分類』就不是只顯示編號, 而會列出類別名稱。

98 查詢多個資料表

99 查詢多個資料表 要達到此目的, 只需在資料來源控制項中下達可正確查詢兩個資料表的 SELECT 敘述即可, 若對 SELECT 語法不夠熟悉, 也可透過 VWD 的查詢產生器替您產生必要的查詢敘述。 請先建立一空白網頁 (Ch12-06.aspx), 先加入 SqlDataSource 控制項並設妥連接字串, 再依如下方式設定:

100 查詢多個資料表

101 查詢多個資料表

102 查詢多個資料表

103 查詢多個資料表

104 查詢多個資料表

105 查詢多個資料表

106 查詢多個資料表

107 查詢多個資料表 建好資料來源後, 在網頁中加入與之繫結的資料控制項, 例如使用 GridView:

108 查詢多個資料表 若想修改類別名稱欄位的表頭文字, 可切換到原始檔模式, 到 <asp:GridView> 標籤之內修改:

109 查詢多個資料表

110 查詢多個資料表 存檔後瀏覽時, 即可看到網頁中顯示的書籍資料, 不再只是列出難解的『類別編號』, 而會列出類別名稱:

111 自訂資料來源的編輯與刪除 功能 使用自訂查詢的方式由多個資料表選出欄位時, 就無法像前一章一樣, 在 SqlDataSource 控制項的設定精靈中, 單單以滑鼠勾選的方式即可讓 VWD 替我們產生編輯、刪除、新增記錄的 T-SQL 敘述。 因此若要讓前一個範例也具有編輯資料等功能, 就必須自行替資料來源控制項編寫相關的 UPDATE / DELETE / INSERT 等敘述的內容。

112 自訂資料來源的編輯與刪除功能 以下只介紹 GridView 的編輯與刪除功能所要用到的 UPDATE 和 DELETE 語法, INSERT 敘述的用法可參考前一章 VWD 自行產生的程式碼, 或本公司『SQL Server 2005 設計實務』一書。

113 UPDATE 敘述 以 UPDATE 更新資料表資料的語法如下:
例如要將書籍資料表中編號為 1 的書名改成 “計算機概論” 、單價改成 500, 可寫成:

114 DELETE 敘述 用 DELETE 敘述刪除資料表中的記錄時, 只需用 WHERE 子句指明要刪除的是哪一筆或哪些記錄即可:

115 指定資料來源控制項的 UPDATE 及 DELETE 敘述
雖然我們的例子是同時顯示 [書籍] 和 [書籍類別] 資料表的資料, 但後者只是為了讓『書籍類別』欄位看起來較有意義而使用的;在更新及刪除記錄時, 都只需針對 [書籍] 資料表中的記錄做更新及刪除, 不需更動 [書籍類別] 資料表。

116 指定資料來源控制項的 UPDATE 及 DELETE 敘述
請先建立網頁 (Ch12-07.aspx), 並如前一範例的方式加入資料來源控制項, 且設定查詢 [書籍]、[書籍類別] 資料表:

117 指定資料來源控制項的 UPDATE 及 DELETE 敘述

118 指定資料來源控制項的 UPDATE 及 DELETE 敘述

119 指定資料來源控制項的 UPDATE 及 DELETE 敘述

120 指定資料來源控制項的 UPDATE 及 DELETE 敘述

121 指定資料來源控制項的 UPDATE 及 DELETE 敘述

122 指定資料來源控制項的 UPDATE 及 DELETE 敘述

123 指定資料來源控制項的 UPDATE 及 DELETE 敘述
但對我們的 ASP.NET 網頁而言, 我們當然無法預知瀏覽者會輸入的值, 因此需用變數 (參數) 的形式來設定, T-SQL 為開頭, 所以在查詢產生器中間窗格輸入參數名稱時,

124 指定資料來源控制項的 UPDATE 及 DELETE 敘述
當瀏覽者在 GridView 的編輯模式下輸入新資料, 並確認變更時, GridView 各編輯欄位中的資料就會透過資料繫結傳送給 SqlDataSource 控制項, 讓後者可使用這些新資料進行更新:

125 指定資料來源控制項的 UPDATE 及 DELETE 敘述

126 指定資料來源控制項的 UPDATE 及 DELETE 敘述
但由上圖我們也發現一個問題, 資料來源中的類別名稱欄位是取自 [書籍類別] 資料表的字串, 而非 [書籍] 資料表存放的整數型別類別編號。 而 GridView 因與資料來源控制項繫結, 所以顯示及傳送回的資料也都是類別名稱字串, 如此一來將會使得 GridView 傳回的參數值, 無法用來更新書籍名稱中的類別編號, 因此我們需在 UPDATE 敘述中使用子查詢的技巧取得整數的『書籍編號』以便進行更新。

127 指定資料來源控制項的 UPDATE 及 DELETE 敘述
『子查詢』即是指查詢敘述內的另一個查詢敘述。 在本例中, 我們要做的就是將 GridView 傳回的類別名稱字串資料以子查詢的方式『換成』類別編號, 所以在子查詢中要用 SELECT 敘述查詢在 [書籍類別] 資料表中, 類別名稱字串所對應的類別編號:

128 指定資料來源控制項的 UPDATE 及 DELETE 敘述

129 指定資料來源控制項的 UPDATE 及 DELETE 敘述

130 指定資料來源控制項的 UPDATE 及 DELETE 敘述
DELETE 敘述和 UPDATE 敘述一樣, 只需對 [書籍] 資料表做刪除即可, 所以可在DELETE 頁次中輸入要刪除 [書籍] 資料表敘述的記錄:

131 指定資料來源控制項的 UPDATE 及 DELETE 敘述

132 資料控制項的設定 完成前述的設定後, 即可啟用 GridView 控制項的編輯、刪除選項, 讓網頁可對資料庫做相關操作:

133 資料控制項的設定

134 資料控制項的設定

135 資料控制項的設定 手動加入查詢參數時, VWD 不會替我們設定其資料型別, 所以我們要輸入如上可對應到資料表中各欄位型別的資料型別。
對大部份的資料型別, ASP.NET 會自行轉換型別並可正常執行, 但對部份資料型別, 若不設定, 更新敘述將無法正常執行。 存檔後用瀏覽器開啟網頁, 即可進行編輯或刪除:

136 資料控制項的設定

137 資料控制項的設定 我們可用前面的範例 Ch12-01.aspx 查詢 [書籍] 資料表, 驗證更新的結果:

138 在編輯欄位以 DropDownList 列出可選用的項目
雖然我們已將前一個範例設計成可在 GridView 編輯模式中輸入書籍類別字串, 更新至資料庫時則寫入類別編號, 讓使用者不需硬記每個類別所對應的編號。 但使用者要能記住所有的書籍類別名稱, 其實也很不方便, 因此若能在 GridView 控制項的編輯模式下提示目前可選用的類別名稱, 將可大幅提昇友善程度, 並避免使用者輸入錯誤。

139 在編輯欄位以 DropDownList 列出可選用的項目

140 在編輯欄位以 DropDownList 列出可選用的項目
所以我們必須將 GridView 中對應的欄位轉換成可自訂內容的 TemplateField, 才能加入所需的 DropDownList 控制項。 請在設計模式做如下設定 (光碟範例檔為 Ch12-08.aspx):

141 在編輯欄位以 DropDownList 列出可選用的項目

142 在編輯欄位以 DropDownList 列出可選用的項目

143 在編輯欄位以 DropDownList 列出可選用的項目

144 在編輯欄位以 DropDownList 列出可選用的項目

145 在編輯欄位以 DropDownList 列出可選用的項目

146 在編輯欄位以 DropDownList 列出可選用的項目

147 在編輯欄位以 DropDownList 列出可選用的項目

148 在編輯欄位以 DropDownList 列出可選用的項目
接下來就是兩個控制項的設定: 1. 將 SqlDataSource2 控制項設為選取 [書籍類別] 資料表中的『類別名稱』欄位 (SELECT 類別名稱 from [書籍類別])。 2. 將 DropDownList1 控制項做如下的設定:

149 在編輯欄位以 DropDownList 列出可選用的項目

150 在編輯欄位以 DropDownList 列出可選用的項目

151 在編輯欄位以 DropDownList 列出可選用的項目
我們還需設定讓它與 SqlDataSource1 的繫結關係, 如此 DropDownList1 中選取的項目才會傳送到 SqlDataSource1 控制項, 成為更新資料時的參數:

152 在編輯欄位以 DropDownList 列出可選用的項目

153 在編輯欄位以 DropDownList 列出可選用的項目

154 在編輯欄位以 DropDownList 列出可選用的項目
完成上述設定後, 當瀏覽者在 GridView 的編輯模式下選好書籍類別名稱, 並按確定時, 透過資料繫結, 此類別名稱將會送到資料來源控制項當成 Update 的參數之一。 而在前一個範例中我們也將 Update 敘述修改成以子查詢取得對應的類別編號, 以便能更新到 [書籍] 資料表。 所以這部份的設定都可沿用前一個範例的設定, 全部設定妥當並存檔,網頁即可正常運作了。

155 在編輯欄位以 DropDownList 列出可選用的項目

156 在編輯欄位以 DropDownList 列出可選用的項目

157 在編輯欄位以 DropDownList 列出可選用的項目

158 在編輯欄位以 DropDownList 列出可選用的項目
在各資料控制項的編輯 / 新增模式下, 都可利用相同的技巧, 讓網頁提供更友善的操作方式, 同時降低輸入錯誤的機率。


Download ppt "Chapter 12 T-SQL 語法與 ASP.NET."

Similar presentations


Ads by Google