當我填寫一個列表框獲取所選的項目從一個列表框,我做這樣的事情:使用索引,而不是價值
SqlDataAdapter adapter = new SqlDataAdapter("Select [DDLValue], [StoredValue]
from [tmpDropdowns] WHERE DDLName = 'ddlHobbies' ORDER BY [SortOrder] ASC", conn);
adapter.Fill(DDLHobbies);
Hobbies.DataSource = DDLHobbies;
Hobbies.DataTextField = "DDLValue";
Hobbies.DataValueField = "StoredValue";
Hobbies.DataBind();
當我想要檢索的項目,我做這樣的事情:
var selectedHobbies = Hobbies.Items.Cast<ListItem>().Where(item => item.Selected);
string strHobbies = String.Join(",", selectedHobbies).TrimEnd();
不幸的是,這給了我這樣的事情:
strHobbies = "Fishing,Skiing,Pool,Birdwatching"
我說: 「很不幸」,因爲我的Ø目標是在SQL字符串的「WHERE」子句中使用strHobbies。所以,我的SQL字符串應該是這樣的:
SELECT * FROM MyTable WHERE Hobbies in (strHobbies)
所以,這個問題有2件。
我如何改變這種「變種selectedHobbies」行中儲值,而不是DDLValue
如何調整自己的「串strHobbies」行,以便它會把周圍的每個雙引號拉項目,所以我可以在'IN'條款中使用它?
我想我可能需要我的最終SQL字符串看起來更像:
SELECT * FROM MyTable WHERE Hobbies in ("2", "5", "6", "9")
編輯:
我已經改變了一兩件事:
List<string> selectedHobbies = Hobbies.Items.Cast<ListItem>()
.Where(item => item.Selected).Select(item => item.Value).ToList();
string strHobbies = String.Join(",", selectedHobbies).TrimEnd();
當我將鼠標懸停在selectedHobbies上時,這給了我StoredValue而不是DDLValue,bu當我在即時窗口中鍵入'?strHobbies'時,它說:「strHobbies這個名稱在當前上下文中不存在」。所以,我已經排名第一,如果有人能夠幫助我#2我會很感激。
那麼明顯,它的美麗。 :o)任何想法爲什麼我在strHobbies上遇到這個錯誤?如果我將第一行更改回原來的樣子,它就可以正常工作。當我改變它給我的價值觀,我得到這個錯誤。 –
你問你提到的直接窗口問題嗎?由於某種原因,Visual Studio認爲該變量超出了範圍。我無法真正幫助你。 –
想通了,這是一個命名問題。上面的代碼工作。謝謝! –