使用索引而不是值从列表框中获取选定的项目
Getting selected items from a listbox using the index instead of value
当我填充一个列表框时,我会做这样的事情:
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"
我说 "unfortunately" 因为我的 objective 是在 SQL 字符串的 "WHERE" 子句中使用 strHobbies。所以,我的 SQL 字符串应该类似于:
SELECT * FROM MyTable WHERE Hobbies in (strHobbies)
所以,这个问题有 2 个部分。
如何更改 "var selectedHobbies" 行以引入 StoredValue 而不是 DDLValue
如何重组我的 "string 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,但是当我在 Immediate window 中键入“?strHobbies”时,它会显示 "The name strHobbies does not exist in the current context"。所以,我把#1 弄下来了,如果有人能帮助我解决#2,我将不胜感激。
对于 #2,您需要在每个值周围加上单引号,而不是双引号。 (假设 Hobbies
不是数据库中的整数)
string strHobbies = String.Join("','", selectedHobbies).TrimEnd();
您可以将它们放在 Select 中,就像这样
List<string> selectedHobbies = Hobbies.Items.Cast<ListItem>()
.Where(item => item.Selected).Select(item => "'" + item.Value + "'").ToList();
当我填充一个列表框时,我会做这样的事情:
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"
我说 "unfortunately" 因为我的 objective 是在 SQL 字符串的 "WHERE" 子句中使用 strHobbies。所以,我的 SQL 字符串应该类似于:
SELECT * FROM MyTable WHERE Hobbies in (strHobbies)
所以,这个问题有 2 个部分。
如何更改 "var selectedHobbies" 行以引入 StoredValue 而不是 DDLValue
如何重组我的 "string 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,但是当我在 Immediate window 中键入“?strHobbies”时,它会显示 "The name strHobbies does not exist in the current context"。所以,我把#1 弄下来了,如果有人能帮助我解决#2,我将不胜感激。
对于 #2,您需要在每个值周围加上单引号,而不是双引号。 (假设 Hobbies
不是数据库中的整数)
string strHobbies = String.Join("','", selectedHobbies).TrimEnd();
您可以将它们放在 Select 中,就像这样
List<string> selectedHobbies = Hobbies.Items.Cast<ListItem>()
.Where(item => item.Selected).Select(item => "'" + item.Value + "'").ToList();