2015-06-10 94 views
0

當我填寫一個列表框獲取所選的項目從一個列表框,我做這樣的事情:使用索引,而不是價值

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件。

  1. 我如何改變這種「變種selectedHobbies」行中儲值,而不是DDLValue

  2. 如何調整自己的「串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我會很感激。

回答

2

對於#2,您希望圍繞每個值使用單引號,而不是雙引號。 (假設Hobbies不在DB整數)

string strHobbies = String.Join("','", selectedHobbies).TrimEnd(); 
+0

那麼明顯,它的美麗。 :o)任何想法爲什麼我在strHobbies上遇到這個錯誤?如果我將第一行更改回原來的樣子,它就可以正常工作。當我改變它給我的價值觀,我得到這個錯誤。 –

+0

你問你提到的直接窗口問題嗎?由於某種原因,Visual Studio認爲該變量超出了範圍。我無法真正幫助你。 –

+0

想通了,這是一個命名問題。上面的代碼工作。謝謝! –

0

你可以把他們的選擇,像這樣

List<string> selectedHobbies = Hobbies.Items.Cast<ListItem>() 
.Where(item => item.Selected).Select(item => "'" + item.Value + "'").ToList(); 
相關問題