2012-05-04 40 views
0

我有一個SQL表中的值的列表,這些值用來派生DropDownList,它具有一個唯一的Integer作爲每個項目的值以及一個String作爲可見文本(通過SqlDataSource)。數據庫中還有第三個字段,它是一個標誌,用於指示列表項是否處於活動狀態(非活動項目未顯示在DropDownList中)ASP.NET DropDownList - 如何處理缺失值?

在下拉列表中進行的選擇作爲整數存儲在數據庫中值(作爲組成整個記錄的數據集的一部分),而不是文本值。

隨着時間的推移,DropDownList中的項目可能會通過將項目標記爲不活動來刪除。但是,仍然需要打開舊記錄,這些記錄可能包含一個非現用項目作爲其數據的一部分...

我的問題是,確保下拉列表中包含缺失值的最佳方法是什麼爲舊紀錄?

映入腦海的兩個方法,其一是:

填充的DropDownList只有當前活動的項目,並裝載記錄,當應用程序試圖選擇一個不存在的值時捕捉,去回到數據庫看看它應該是什麼(文本值),並手動將其添加到下拉菜單中。

或...

填充DropDownList的所有列表項(有效和無效),加載的記錄,然後編程刪除所有不活動的項目(execpt對於任何正在選擇)。

這些都不是特別有效,所以我想知道這種事情是否有最佳做法?

回答

1

有這麼多最佳的方法來做這樣的事情,我在這裏定義了幾個,使用下面的任何一個如果你的下拉列表項數少於200,可以說下拉列表是產品

1)
           我)加載所有產品記錄下拉列表,並通過設置可見隱藏非那些= FALSE
           我)當加載比尋找它的下拉列表值的用戶記錄,如果它看到比選擇和享受,如果它不可見比使其可見通過設置其屬性可見= TRUE和選擇它並在標誌中設置其索引或ID,以在您的/用戶執行所需操作後再次更改其可見性(visible = false)。

2)
           我)負載纔有效產品記錄在下拉列表中
            ii)在加載用戶記錄還加載其產品細節 (name,id,inactive_status)使用在sql中加入。在用戶記錄
           三)檢查如果項目處於非活動狀態,然後添加其紀錄下拉列表中,你有它的所有細節現在用戶細節記錄其他選擇它。

重要提示:如果你下拉列表在數以百萬計的項目不是使用ADVANCE搜索技術

0

我會做的第一件事就是質疑您的業務邏輯 - 如果您在其他位置的某個活動行中將其用作外鍵時,是否可以使其處於非活動狀態?如果你使它不活動,如果它不能刪除所有的外鍵?

要回答你的問題,雖然我會去第二個想法的變化,但在這樣的頁面過濾可能比直接使用SQL更慢,所以我想你現在有這樣的東西來填充下拉菜單

SELECT * FROM Table WHERE Active = 1 

你應該已經有您的記錄和外鍵值,所以我將其更改爲這個

SELECT * FROM Table WHERE Active = 1 OR PrimaryKey = [YourForeignKey] 

那麼你將永遠有選擇的項目,但也應該是相當有效的。

+0

我使用的有效/無效標誌的原因是,(只是舉例)上週我下拉菜單包括「貓」,「狗」和「魚」,記錄可以用這些選項保存,但從本週開始我不再銷售「魚」,所以我將其標記爲不活動,以便它不出現在下拉列表,但我仍然需要能夠引用它爲我的舊數據(因此保持外鍵關係)。 在我的頁面中,DropDownLists是在記錄加載之前的數據綁定,所以我認爲這可能是我要出錯的地方? – triplestones

+0

只是一個想法,據推測任何有Fish的外鍵的記錄都是舊數據(即遺留),所以你不會真的想對它做任何改變?那麼,爲什麼不只是把選定的價值回來?無論哪種方式,如果你想使其效率,我會開始綁定記錄加載後的下拉菜單。 –