我有一个列出名字的现有下拉列表。
我正在尝试创建另一个包含所有字母
的下拉列表我想要完成的是:
当用户从Alphabet Dropsownlist中选择一个字母时,第二个dropdwonlist将填充以所选字母表开头的所有名称。
我有这段代码。
.someclass
但它给了我一个错误:
`NamesDropDownList.SelectedValue = (NamesDropDownList.DataValueField).Where(NamesDropDownList.SelectedItem.Value).Contains(AlphabetsDropDownList.SelectedItem.Value);`
任何帮助或解决此问题的方法。
谢谢
答案 0 :(得分:1)
这一行代码有几个问题。让我们从数据来源开始。这不是您的数据来源:
NamesDropDownList.DataValueField
这只是string
上的DropDownList
属性。您无法从 中选择记录,您必须从数据库(或您的支持数据所在的位置)中选择它们。您尚未提供该上下文,因此我假设它是一些标准的LINQ可查询数据源。让我们说,为了这个例子,它是这样的:
dbContext.Names
那就是你所附加的"其中"子句以便选择数据。现在让我们继续讨论该条款,看看它是什么样的。对于初学者来说,不会看起来像这样:
.Where(NamesDropDownList.SelectedItem.Value).Contains(AlphabetsDropDownList.SelectedItem.Value)
.Where()
方法不期望string
,它期望Func<T, bool>
作为谓词。 内部该谓词是您拥有.Contains()
的地方,它将在字符串上运行,而不在整个集合。所以它可能看起来像这样:
dbContext.Names.Where(n => n.Name.Contains(AlphabetsDropDownList.SelectedItem.Value))
这行代码基本上是:
从数据库中的
Names
表中,选择Name
列包含给定值的所有记录。
这将为您提供数据源中经过筛选的记录集,然后可以将其用于绑定到下一个DropDownList
。
答案 1 :(得分:0)
答案 2 :(得分:0)
让字母表下拉列表中的SelectedIndexChanged()事件处理程序填充名称列表:
private DataSet GetNameData()
{
string sql = "select Firstname, Lastname from Names where Firstname like '@Letter%';";
SqlParameter arg = new SqlParamter("@Letter", ddlLetter.SelectedItem.Value));
SqlCommand cmd = new SqlCommand, sql, ConnectionString);
cmd.Paramters.Add(arg);
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
da.SelectCommand = cmd;
da.Fill(ds);
return ds;
}
private void ddlLetter_SelectedIndexChanged(object sender, EventArgs e)
{
DataSet Names = GetNameData();
ddlNames.DataSource = Names.Table[0];
ddlNames.DataTextField = "Firstname";
ddlNames.DataValueField = "Id";
ddlNames.DataBind();
ddlNames.Items.Insert(0, new ListItem("Please select a name", 0);
}
确保您将字母下拉列表设置为AutoPostBack="true"
,否则无效。
希望这有帮助!