【问题标题】:What's the correct way to fill a DropDownList using LINQ?使用 LINQ 填充 DropDownList 的正确方法是什么?
【发布时间】:2013-03-16 21:47:15
【问题描述】:

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

我在 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 没有被填充。我做错了什么?
  • 我明白了。我的代码中的条件之一没有得到满足。所有三个答案都是有效的,但只能将一个标记为答案抱歉:-(

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


【解决方案1】:

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

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

更重要的是,您不必指定DataTextField 和DataValueField,因为您的DataSource 是List<string>:

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

【讨论】:

    【解决方案2】:

    假设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>,因此您不必在 databind 上指定字段名称,而这种情况实际上是错误的。

    【讨论】:

    • 对不起,“是类型字符串”是什么意思?
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      其他方式..

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

      【讨论】:

        【解决方案5】:
        <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-"));         
        

        【讨论】:

          猜你喜欢
          • 2011-11-05
          • 2012-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-03
          • 2011-06-07
          • 2014-01-26
          相关资源
          最近更新 更多