这是我的数据库表,我的下拉列表的SqlDataSource SelectCommand以及我的下拉列表的文本和值字段属性。我希望我所选择的国家的所有结果都与之相对应。我的意思是当我选择西班牙时,我希望将2和3都用于resultsid。但问题是,在我的下拉列表中,我有重复的国家/地区文本,我无法更改它。
country resultsId
spain 2
spain 3
china 2
china 4
canada 1
canada 4
england 1
england 3
usa 1
usa 2
SelectCommand="SELECT distinct countries, resultsid FROM countrytable"
DataTextField="country" DataValueField="resultsid"
我尝试了这个SelectCommand:
SelectCommand="SELECT resultsId,(select country, count(*)
from countrytable group by country having count(*) >1) FROM countrytable
但现在,我有这个错误:
Only one expression can be specified in the select list when the
subquery is not introduced with EXISTS
我正在使用sql server和asp.net c#
答案 0 :(得分:1)
错误非常清楚,告诉您的查询必须只为指定的select子句返回一个值。所以,你可以申请自我加入;
select c.* from countrytable c inner join
(select country from countrytable group by country having count(*) >1) c2
ON c.country = c2.country
答案 1 :(得分:1)
您应该使用STUFF
。
select distinct country, STUFF
(
(select ',' + cast(resultsid as varchar) from countrytable c2
where c1.country = c2.country
for XML PATH ('')),1,1,''
)
from countrytable c1
答案 2 :(得分:1)
由于Asp.Net数据绑定控件不支持一个项目的多个值,因此无法使用SqlDataSource实现reqiurements。因此,您需要为数据准备一个项目只有一个值。
此处至少有两个选项:
1)在您的特定情况下,最简单的方法是将查询更改为在一个字符串中合并值,就像它清楚地显示@Bharadwaj
1)在更常见的情况下,您可以使用ObjectDataSource。您需要创建一个方法,该方法将返回具有DataTextField
和DataValueField
属性的对象集合,例如Country = "spain", ResultIds = "2,3"
。在此方法内部,您可以使用查询并执行sql无法完成的任何数据处理。
无论如何,对于一个数据源项,您应该只有一个值(在本例中为连接字符串)。然后,您将解析字符串以从DropDownList中获取值