2011-01-19 67 views
0

我有三个DropDown列表Controls.each下拉列表中包含静态值1,2,3,4 我需要做的是当第一个下拉列表中选择一个项目(在SelectedIndexChanged事件)相同的项目应该在其他两个下拉列表中选择DropDown列表选择

+1

好吧!那么什么不起作用? – Shoban 2011-01-19 18:06:00

回答

1

这就是你所做的。

在ASPX代码:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged"> 
    <asp:ListItem Text="1" Value="1" /> 
    <asp:ListItem Text="2" Value="2" /> 
    <asp:ListItem Text="3" Value="3" /> 
    <asp:ListItem Text="4" Value="4" /> 
</asp:DropDownList> 
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged"> 
    <asp:ListItem Text="1" Value="1" /> 
    <asp:ListItem Text="2" Value="2" /> 
    <asp:ListItem Text="3" Value="3" /> 
    <asp:ListItem Text="4" Value="4" /> 
</asp:DropDownList> 
<asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged"> 
    <asp:ListItem Text="1" Value="1" /> 
    <asp:ListItem Text="2" Value="2" /> 
    <asp:ListItem Text="3" Value="3" /> 
    <asp:ListItem Text="4" Value="4" /> 
</asp:DropDownList> 

在代码隐藏:

protected void ddl_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DropDownList ddl = (DropDownList)sender; 
    string value = ddl.SelectedValue; 

    SetValue(DropDownList1, value); 
    SetValue(DropDownList2, value); 
    SetValue(DropDownList3, value); 
} 

protected void SetValue(DropDownList ddl, string value) 
{ 
    ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue(value)); 
} 

只需键入ddl1.SelectedValue = ddl2.SelectedValue将无法​​正常工作,因为DropDownList.SelectedValue是只读的。

请注意,我没有将所有DDL的SelectedIndex设置为发件人的SelectedIndex。你的可以在你的示例场景中使用它,但是如果你的一个DDL的ListItems的顺序与其他顺序不同,代码将会中断。在我看来,这使得它危险的做法,但YMMV。另外,如果您决定推广SetValue方法(我经常在整个项目中将其作为扩展方法添加到DropDownList控件中),则应该处理在DDL中找不到目标值的情况,推测是抛出异常。您也可以使用FindByText制作SetText版本。

1

将第2个和第3个下拉列表中的selectedvalue属性设置为第1个上的选定值。将DropDown设置为autopostback =“true”,以便将其发送回服务器,并且可以适当地进行设置。

或者,当更改客户端事件触发第一个选择元素时,使用客户端JavaScript更改其他select元素上的selectedindex属性。

0

所有你需要做的是设置你的其他下拉列表的SelectedIndex这样的:

protected void DropDownList1SelectedIndexChanged(Object sender, EventArgs e) 
{ 
    dropDownList2.SelectedIndex = dropDownList1.SelectedIndex; 
    dropDownList3.SelectedIndex = dropDownList1.SelectedIndex; 
} 
+0

忘了提及...所有下拉列表中的值都不是相同的顺序,所以这不起作用... – chamara 2011-01-19 18:16:22

0

尝试以下操作:

标记:

<asp:DropDownList ID="dd1" OnSelectedIndexChanged="dd1_SelectedIndexChanged" AutoPostBack="true" runat="server" /> 
<asp:DropDownList ID="dd2" runat="server" /> 
<asp:DropDownList ID="dd3" runat="server" /> 

代码隐藏:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
     BindData(); 
} 

protected void dd1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string selected = dd1.SelectedValue; 

    dd1.SelectedValue = dd2.SelectedValue = dd3.SelectedValue = selected; 

    BindData(); 
} 

private void BindData() 
{ 
    int[] values = { 1, 2, 3, 4 }; 

    dd1.DataSource = dd2.DataSource = dd3.DataSource = values; 

    dd1.DataBind(); 
    dd2.DataBind(); 
    dd3.DataBind(); 
} 
+0

我相信`dd1.SelectedValue = dd2.SelectedValue`会导致错误,因为这是一个只读属性。 – 2011-01-19 18:37:31

+1

@Justin:不,它不是。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.selectedvalue.aspx。我测试了我的代码btw。 – volpav 2011-01-19 19:08:37