根据另一个下拉列表填充下拉列表

时间:2012-09-04 07:40:04

标签: c#

  

可能重复:
  Populate one dropdown based on selection in another

我的aspx页面上有3个下拉列表。第一个是硬编码的4个值。第二个应该以编程方式填充,例如。如果我在第一个下拉列表中选择“Product1”,则应使用“Model1_1”,“Model1_2”等值填充第二个下拉列表。如果我选择“Product2”,则第二个下拉列表中填入“Model2_1”,“Model2_2”。

你可以给我一些帮助吗?

3 个答案:

答案 0 :(得分:4)

1在第一个DropDownList1上设置AutoPostBack="true"并添加OnSelectIndexChanged="YourDelegate"

2在您发布数据的委托中,将第二个DropDownList2与前缀SelectedValue绑定

 protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e)
 {
   var value =  DropDownList1.SelectedValue;
   if(value == "Product1")
   { 
    ....      
   }
   else if(value == "Product2")
   { 
    ....      
   }
 }

答案 1 :(得分:3)

我可以为这些问题命名2个解决方案。

第一个涉及使用AJAX Toolkit for ASP.NET页面中的Cascading Drop Down。 你有这里的参考和一个例子: http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/CascadingDropDown/CascadingDropDown.aspx 它以某种方式cleaner并且它不会导致回发,但您必须使用该工具包。但是学会使用它很好,因为它为其他人提供了很好的设施。

第二个涉及为DropDownList添加OnSelectedIndexChange事件的处理程序。因此,当用户从第一个下拉列表中选择一个值时,服务器端将捕获该事件并使用必要的值填充第二个DropDown。由于这需要服务器端操作,因此在进行选择之后重新加载页面可能相当烦人。 客户端应如下所示:

  <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack = true OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList>

服务器端的位置:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList2.Items.Clear();
    DropDownList2.Items.Add("text");
    ....
}

答案 2 :(得分:2)

您可以通过以下方式填充第二个drp(DropDownList): 将1st drp与调用此查询的表连接:(在SQLDataSource1中)

SELECT [id], [name] FROM Products

在第二个drp中你应该调用(在SQLDataSource2中)

 SELECT [id], [name] FROM Models WHERE ProductID=@Product_id

SQLDataSource2 select command属性中为Product_id添加参数值必须为drp1.SelectedValue

注意:不要忘记drp1的Enable AutoPostBack