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

时间:2013-03-16 21:47:15

标签: c# asp.net linq linq-to-sql

我知道这个问题可能重复,但我看了很多例子,但没有一个适合我的情况。

我在DataList中有一个DropDownList,我需要使用来自DB的数据填充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来获取数据。

任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:5)

您的Distinct调用看起来应该是查询本身,而不是结果中的一个值:

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

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

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

答案 1 :(得分:0)

假设pr_product类型为string,这应该可以正常工作

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

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

根据我的假设,ddquery将为IEnumerable<string>,因此您无需在数据绑定中指定字段名称,这种情况实际上是错误的。

答案 2 :(得分:0)

(替代方案,使用匿名类型)

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

答案 3 :(得分: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());

答案 4 :(得分: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-"));