[錯誤] XX擁有的 SelectedValue 無效,因為它不在項目清單中

我今天在一個 DetailsView 中建立 Template 欄位,並在 EditTemplate 裡面放置了一個 DropDownList,結果在 DetailsView 對某些資料進行編輯時,突然出現了「DropDownList1 擁有的 SelectedValue 無效,因為它不在項目清單中」的奇怪錯誤訊息...

 

我今天在一個 DetailsView 中建立 Template 欄位,並在 EditTemplate 裡面放置了一個 DropDownList,結果在 DetailsView 對某些資料進行編輯時,突然出現了「DropDownList1 擁有的 SelectedValue 無效,因為它不在項目清單中」的奇怪錯誤訊息。從表面上看,這個錯誤是絕對不可能發生的,因為我在 DataSource 中是直接從資料庫撈出資料來,怎麼會有 SelectedValue 不在項目清單(Item List)中的道理?

檢查了很久,結果還是只能從錯誤訊息去推敲問題的來源,最後終於發現答案了。

原來我這個 DropDownList 的資料來源是透過 SqlDataSource 從資料庫撈出資料的,但是我下了類似 SELECT DISTINCT XXX FROM YYY 的 SQL 指令。但是在資料庫中,我發現看來相同的幾筆資料,事實上有些在後面夾雜了空白字元。例如有幾筆是 "ABC",有幾筆是 "ABC " (注意後面的空白字元)。透過 DISTINCT 修飾詞,篩選到的資料都是 "ABC",但在 ASP.NET 2.0,它並不承認 "ABC " = "ABC",結果它判斷那幾筆資料為 "ABC " 的,並不在 Item List 裡面(因為裡面只有 "ABC",而沒有 "ABC "),所以它就告訴你「它不在項目清單中」了。

接著,我進資料庫把那些資料尾巴的空白字元消除,問題馬上迎刃而解。同樣的, 如果你以後看到這個錯誤, 回去資料庫裡面查查, 差不多就可以找到原因了。


Dev 2Share @ 點部落