2011-01-19 92 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