我知道这个问题可能重复,但我看了很多例子,但没有一个适合我的情况。
我在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来获取数据。
任何帮助将不胜感激。
答案 0 :(得分:5)
您的Distinct
调用看起来应该是查询本身,而不是结果中的一个值:
var ddquery = (from dd in db.PRODUCTs select dd.pr_product).Distinct().ToList();
更重要的是,您不必指定DataTextField
和DataValueField
,因为DataSource
是List<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-"));