close

我要設計在查詢過程中,頁面會即時告知使用者目前還有多少筆資料可供查詢的技巧,
之前已經學會了將資料表的內容載入下拉選單(DropDownList):
http://jerry5217.pixnet.net/blog/post/225960490
上次的技巧中我們是用SqlDataReader這個類別,將資料逐筆新增到下拉選單中,
當然我們在逐筆取得資料表的內容後,依樣可以得知總共有多少資料筆數啦!
但是有時候我只是要那個數字而已,沒必要浪費時間等待逐筆讀取完成,
所以這次我要用SqlDataAdapter這個類別來進行...

假設我們有以下一個簡單的資料表:
DB1.png

當中6位學生的資料,有3個二年級有2個五年級及1個一年級,
當我在查詢就讀年級的時候,網頁就會直接告訴我目前有幾位學生,
設計一個簡單的頁面來說明,
首先啟用下拉選單的AutoPostBack,下拉選單的名稱是DDL_Year,

DropDownList_AutoPostBack.png
這樣一來每當下拉選單的選項一變動,網頁就會自動"後送"項目內容,
另外用一個名稱SNo_L的Label控制項,來顯示即時回應的結果,
例如以下頁面,我選了2年級網頁立即回應2年級的學生人數:

後端程式碼如下:

Code1.png

程式碼內容用了二次去查詢資料表,
(1)先依據下拉選單的項目指定查詢該年級所有的人數,
所以用了SqlDataAdapter這個類別,直接讀取資料集合的總數,

(2)清空再重新載入下拉選單的項目,
這裡可以沿用之前SqlDataReader這個類別的方法來載入資料,
http://jerry5217.pixnet.net/blog/post/225960490
而現在我們一樣用SqlDataAdapter這個類別來處理,

有注意到嗎?
用SqlDataReader類別讀資料表的時候,是用While迴圈逐筆讀完為止,
而SqlDataAdapter類別讀資料表的時候是用For迴圈,
而且要指定列(Rows)及行(Columns)的位置,感覺比較有表格(Table)的概念,
執行時前端網頁會先載入下拉選單內容-(上述(2)的程式碼),

Page1.png

當我們選擇了2年級後,PostBack機制會把條件往後送,
則網頁會隨即秀出2年級的人數-(上述(1)的程式碼),
並重新整理下拉選單-(上述(2)的程式碼),

Page2.png

另外,
我們在後端程式碼也可以利用IsPostBack這個變數來判斷網頁現在當下的狀況,
例如把剛剛上述(2)的程式碼多包了一個if (!IsPostBack)的判斷式之後,

Code2.png

注意看喔!
我是用(!IsPostBack)來判斷,這代表IsPostBack的狀態是在False的環境下,
意思就是當沒有後送變數回來的時候才要執行上述(2)的程式碼,
以這個範例而言就是第一次開啟網頁的時候才需要執行,
所以每當選擇完欲查詢的年級後,頁面會回應目前有幾位學生,
但是下拉選單就不會再重新整理了!

Page3.png

不再重新整理下拉選單的好處是系統少一次資料庫查詢的動作,
而且選單會停留在所選的項目上,
但是如果選單的資料來源是更新較為頻繁的資料表,
則會容易造成不同使用者看到不同的網頁選單內容了...

 

arrow
arrow
    文章標籤
    C# ASP.Net 資料庫
    全站熱搜

    王振權 發表在 痞客邦 留言(0) 人氣()