2013-03-16 56 views
2

我知道这个问题可能是重复的,但我看了很多例子,但没有一个适合我的情况。使用LINQ填充DropDownList的正确方法是什么?

我有一个DropDownList内DataList,我需要填充DropDownList数据从数据库。我知道如何在DataList中找到下拉控件,并且我知道如何使用SqlCommand填充下拉列表。现在我试图学习LINQ,但我无法填充下拉列表。请参阅我下面的场景:

 //Scenario 1 
     var ddquery = from dd in db.PRODUCTs select dd.pr_product.Distinct(); 

     product.DataSource = ddquery;     
     product.DataTextField = "pr_product"; 
     product.DataValueField = "pr_product"; 
     product.DataBind(); 

在场景1中,我得到错误:“不支持类型‘System.String’序列的运营商。”

 //Scenario 2 
     var ddproc = from dd in db.isp_GETDDL("PRODUCTS", "", "") select dd; 

     product.DataSource = ddproc; 
     product.DataTextField = "pr_product"; 
     product.DataValueField = "pr_product"; 
     product.DataBind(); 

在方案2中,我得到错误:“数据绑定:‘isp_GETDDLResult’不包含名为‘pr_product’属性”。在这种情况下,我并不是真的如果我正确地做到这一点,因为PROC返回一组数据,但我不确定我是否正确处理。

 //Scenario 3 
     var ddq = from dd in db.PRODUCTs select dd; 

     product.DataSource = ddq; 
     product.DataTextField = "pr_product"; 
     product.DataValueField = "pr_product"; 
     product.DataBind(); 

在方案3中,我得到了同样的错误在2,但在这一个我不使用PROC来获取数据。

任何帮助将不胜感激。

+0

对不起,所有三个答案我没有得到任何错误,但将DropDownList没有被填补。我究竟做错了什么? – jorame 2013-03-16 22:17:32

+0

我明白了。我的代码中的一个条件没有得到满足。所有三个答案都是有效的,但只能标记一个作为答案抱歉:-( – jorame 2013-03-16 22:29:12

回答

5

看起来你Distinct通话应该是查询本身,而不是结果中的一个值:

var ddquery = (from dd in db.PRODUCTs select dd.pr_product).Distinct().ToList(); 

什么更重要,你不必指定DataTextFieldDataValueField,因为你的DataSourceList<string>

product.DataSource = ddquery;     
product.DataBind(); 
0

假设pr_product是类型string这应该工作

//Scenario 1 
    var ddquery = from dd in db.PRODUCTs select dd.pr_product.Distinct(); 

    product.DataSource = ddquery;     
    product.DataBind(); 

按照我的假设,ddqueryIEnumerable<string>,所以你不必在数据绑定指定字段名称,它实际上是错误的,这种情况下。

+0

对不起,你是什么意思“是字符串”? – jorame 2013-03-16 22:07:48

0

(替代,使用匿名类型)

product.Datasource = ddquery.Select(d => new 
{ 
pr_product = d.something 
}); 
0

其他方式..

1.var query=(from p in ContexName.TableName 
2.   select new{ 
3.     p.fieldName 

4.   }).toArray(); 
5.for(int i=0;i<query.count();i++) 
6.  dropdownlist.items.add(query[i].FieldName.toString()); 
相关问题