下拉列表中的重复文本值,asp.net

时间:2018-01-22 12:42:44

标签: c# asp.net sql-server

这是我的数据库表,我的下拉列表的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#

3 个答案:

答案 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。您需要创建一个方法,该方法将返回具有DataTextFieldDataValueField属性的对象集合,例如Country = "spain", ResultIds = "2,3"。在此方法内部,您可以使用查询并执行sql无法完成的任何数据处理。

无论如何,对于一个数据源项,您应该只有一个值(在本例中为连接字符串)。然后,您将解析字符串以从DropDownList中获取值

相关问题