我目前的代码有两个问题:
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();
}
答案 0 :(得分:0)
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>
将此行添加到bindCoffeeNames:
DropDownList2.DataTextField = "coffeeName";
此外,最好指定DataValueField
(您还必须更改查询以返回CoffeeId
,但这不是必需的)