我有两个DropDownList
控件的代码,一个影响另一个控件中的元素。代码是:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillDropDownList();
}
}
我为简报AutoPostBack="True"
设置了DropDownList
。
private void FillDropDownList()
{
DataSet ds = new DataSet();
SqlDataAdapter myda = new SqlDataAdapter("Select newsletter FROM Tablename", connection Object);
myda.Fill(ds);
drop_date.DataSource = ds;
drop_date.DataValueField = "date";
drop_date.DataBind();
drop_date.Items.Insert(0, new ListItem("Select", "0"));
}
protected void drop_date_SelectedIndexChanged(object sender, EventArgs e)
{
DataSet ds = new DataSet();
SqlDataAdapter myda = new SqlDataAdapter("Select newsletter FROM tablename where date='"+drop_date.SelectedValue+"'",connection_Object);
myda.Fill(ds);
drop_newsletter.DataSource = ds;
drop_newsletter.DataValueField = "newsletter";
drop_newsletter.DataBind();
drop_newsletter.Items.Insert(0, new ListItem("Select", "0"));
}
我认为这段代码是正确的,但我不确定如何使用asp.net和html在标记代码中应用它。我怎么把它放进去?或者是否有更简单的JavaScript解决方案?
答案 0 :(得分:4)
这是使用asp.net创建下拉列表的方法:
<asp:updatepanel runat="server" id="UpdatePanel" UpdateMode="Conditional">
<contenttemplate>
<asp:dropdownlist runat="server" id="drop_date" OnSelectedIndexChanged="drop_date_SelectedIndexChanged" AutoPostBack="true">
</asp:dropdownlist>
<asp:dropdownlist runat="server" id="drop_newsletter">
</asp:dropdownlist>
</contenttemplate>
</asp:updatepanel>
然后在你的.cs代码中:
protected void drop_date_SelectedIndexChanged(object sender, EventArgs e)
{
DataSet ds = new DataSet();
SqlDataAdapter myda = new SqlDataAdapter("Select newsletter FROM tablename where date='"+drop_date.SelectedValue+"'",connection_Object);
myda.Fill(ds);
drop_newsletter.DataSource = ds;
drop_newsletter.DataValueField = "newsletter";
drop_newsletter.DataBind();
drop_newsletter.Items.Insert(0, new ListItem("Select", "0"));
//This updates the panel Asynchronously
UpdatePanel.Update();
}
如果你使用javascript: 您需要创建一个Web服务,以便您可以使用ajax调用来恢复数据。然后,您将使用javascript将该数据绑定到第二个下拉列表。
答案 1 :(得分:0)
我不确定你将它应用于标记代码是什么意思,现在代码的样子你应该在表单上有两个下拉列表(在源视图中),当你选择第一个时( drop_date
)它应该回发并致电drop_date_SelectedIndexChanged()
(假设autopostback
上的drop_date
属性设置为true)。
这样做的一个更简单的方法是考虑以下之一:
考虑使用类似Ajax Toolkit的Cascading Drop Downs控件。有一个完整的演练,可以将它与数据库here集成。
如果您想保留上述代码,另一种选择就是使用Update Panel。
答案 2 :(得分:0)
您可以阅读“使用两个DropDownLists进行主/细节过滤”教程(C#)