根据以前的下拉列表选择填充下拉列表

时间:2013-03-21 00:32:25

标签: c# asp.net

在我的ASP网站中,我有两个下拉列表,第一个有用户选择的四个选项,基于此,第二个下拉列表将从选定的数据库列数据中填充。我试图以编程方式填充这些列表,而不是通过数据源绑定它们

我目前的代码有两个问题:

1。在我的'onselectedIndex changed'方法中,如果我想单击下拉列表中的第一个元素,我就无法触发我的事件,我必须单击另一个项目,然后重新单击第一个,因为它太触发了。我确实将AutoPostBack设置为true

2。当事件触发时,数据库数据没有填充第二个下拉列表,它正确填充数据集的正确行数,但不显示数据。

从第一个下拉列表中选择第一个元素,即'咖啡名称',然后第二个列表填入正确的行号,即3但不包含正确的数据

当前代码:

 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string option = DropDownList1.SelectedValue;
        // If the selected element is 'Coffee Name' run the method.
        if (option == "Coffee Name")
        {
            bindCoffeeNames();
        }
    }



    private void bindCoffeeNames()
    {
        Query the DB and bind the data to the second dropdown list.
        SqlConnection sqlcon = new SqlConnection(connstring);
        SqlCommand sqlcmd = new SqlCommand("select coffeeName from Coffees ORDER BY coffeeName ASC", sqlcon);
        SqlDataAdapter adp = new SqlDataAdapter(sqlcmd);
        DataSet ds = new DataSet();
        adp.Fill(ds);
        DropDownList2.DataSource = ds.Tables[0];
        DropDownList2.DataBind();

    }

1 个答案:

答案 0 :(得分:0)

  1. Autopostback只会在更改时触发。您想要将默认占位符插入到
    下拉列表。你可以用这样的代码来做:

    dropdownlist1.Items.Insert(0, new ListItem("Select an item", String.Empty));
    dropdownlist1.SelectedIndex = 0;  
    

    或者在标记中:

     <asp:DropDownList ID="ddlPersons" runat="server" AppendDataBoundItems="true" DataValueField="ID" DataTextField="Name">
    <asp:ListItem> -- please select person -- </asp:ListItem>
    </asp:DropDownList>
    
  2. 将此行添加到bindCoffeeNames:

    DropDownList2.DataTextField = "coffeeName";

  3. 此外,最好指定DataValueField(您还必须更改查询以返回CoffeeId,但这不是必需的)