依赖下拉列表(级联)

时间:2016-03-29 12:08:15

标签: c# asp.net

我有一个列出名字的现有下拉列表。

我正在尝试创建另一个包含所有字母

的下拉列表

我想要完成的是:

当用户从Alphabet Dropsownlist中选择一个字母时,第二个dropdwonlist将填充以所选字母表开头的所有名称。

我有这段代码。

.someclass

但它给了我一个错误:

`NamesDropDownList.SelectedValue = (NamesDropDownList.DataValueField).Where(NamesDropDownList.SelectedItem.Value).Contains(AlphabetsDropDownList.SelectedItem.Value);`

任何帮助或解决此问题的方法。

谢谢

3 个答案:

答案 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)

查看在父DDL上创建事件处理程序

Dynamic DDL Event Handler

DropDownList Change Event

答案 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",否则无效。

希望这有帮助!