2010年10月14日 星期四

asp.net_下拉式選單同時擁有自訂項目與資料庫內的項目

"下拉式選單"是一個在視窗系統很常會使用的元件,當選取項目都是固定且數量很少時,我們可能會貪圖方便,直接寫死在程式碼當中:

但是當項目會隨著其他功能或是時間變更時,我們就會往一些可以動態產生項目的方式修改,最常使用的方式當然就是存在資料庫當中;那你當然可以選擇直接拉一個SqlDataSource到頁面上,或是將這些查詢寫在程式碼當中去呼叫,再塞入下拉式選單中。

好,很簡單的就可以從資料庫撈出相對應的資料放到下拉式選單中。

我們會使用下拉式選單的功能大概有三種:
1. 要篩選特定已知的查詢項目(例如行政區)
2. 要新增資料時,讓使用者可以免除打字或打錯字的困擾
3. 編輯資料(理由同新增)

但是想像一下會發現如果單純只把資料庫的項目放進去,可能會造成一些不便:
1. 篩選時,無法直接藉由下拉式選單了解使用者不想篩選該欄位(因為一定會選到一項)。
2. 無法對該欄位先填空值。
3. 若原資料為空值,編輯畫面會誤以為使用者選擇第一項。
所以,我們馬上就會希望把類似"請選擇性別"、"請選擇區域"這樣的項目放在第一項;結果可以發現,當我們已經使用SqlDataSource進行資料繫結後,他似乎沒辦法顯示我們所放上去的ListItem項目。

直觀的想,我們有兩個做法:
1. 在資料庫裡面增加一筆資料,叫他做....沒選之類的。←感覺就是一個很爛的作法。
2. 利用程式的方式解決,先利用Items.Add加入我們想加入的"自訂項目",再將資料選出去,跑一個迴圈放進去。

其實DropDownList這個元件已經替我們想好了,他有一個屬性AppendDataBoundItems,VS說明寫:將資料繫結項目附加至靜態宣告的清單項目,也就是說只要設定該屬性為True,他就會在繫結的時候保存自訂項目。


下拉式選單有時候看起來非常方便,但其實"很多時候"我自己都覺得很難用,以查詢功能來說有些使用者希望幾乎全部的項目都是下拉式選單,結果資料庫內的項目多達100項,最後不知道是從那100項裡面找出要篩的項目比較快?還是直接做關鍵字搜尋比較快?

沒有留言:

張貼留言