使用LINQ填充DropDownList的正确方法是什么?

3

我知道这个问题可能是重复的,但我查看了大量的示例,但没有一个适合我的情况。

我在DataList中有一个DropDownList,我需要使用来自数据库的数据填充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中,我遇到了错误:“DataBinding:'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来获取数据。
任何帮助都将不胜感激。

抱歉,我得到了三个答案,但是DropDownList没有被填充。我做错了什么? - jorame
我想通了。我的代码中有一个条件没有被满足。所有三个答案都是有效的,但只能标记一个作为答案,抱歉 :-( - jorame
5个回答

6
看起来您的Distinct调用应该在查询本身上,而不是在结果中的一个值上:
var ddquery = (from dd in db.PRODUCTs select dd.pr_product).Distinct().ToList();

更重要的是,您不必指定DataTextFieldDataValueField,因为您的DataSourceList<string>类型:

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

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());

0
假设pr_product是字符串类型,这个应该可以工作。
    //Scenario 1
    var ddquery = from dd in db.PRODUCTs select dd.pr_product.Distinct();

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

根据我的假设,ddquery将是IEnumerable<string>,因此您不必在数据绑定时指定字段名称,而对于这种情况来说,实际上是错误的。

对不起,"is type string" 是什么意思? - jorame

0

(另一种方法,使用匿名类型)

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

0
<asp:DropDownList ID="ddlCategorie" runat="server">                         
</asp:DropDownList>   

在代码后端文件中:
ddlCategorie.DataSource = context.Categories.ToList();
ddlCategorie.DataTextField = "Nom";
ddlCategorie.DataValueField = "CategorieId";
ddlCategorie.DataBind();
ddlCategorie.Items.Insert(0, new ListItem("-Séléctionner une catégorie-"));         

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接