2012-09-04 215 views
4

可能重复填充下拉列表:
Populate one dropdown based on selection in another基于另一个下拉列表中

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

你能给我一些帮助吗?

+0

忘记Enable AutoPostBack我发现它也如同,但下拉列表中填充来自SQL数据库。谢谢 –

回答

4

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

2在你的委托当您发布的数据,与前缀的SelectedValue

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

我能说出2个解决这一问题,结合你的第二个DropDownList2。

第一个涉及使用AJAX工具包中的Cascading Drop Down for ASP.NET页面。 你有这里的参考和一个例子: 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"); 
    .... 
} 
+0

谢谢@Coral Doe! –

2

您可以通过此方法来填充第二DRP(DropDownList中): 连接1号DRP与表,它调用此查询:(在SQLDataSource1)

SELECT [id], [name] FROM Products 

在第二DRP你应该调用(在SQLDataSource2)

SQLDataSource2 select command地产
SELECT [id], [name] FROM Models WHERE [email protected]_id 

添加参数值Product_id它必须是drp1.SelectedValue

注意:不要为DRP1

+0

谢谢@eminach! –

相关问题