2011-01-19 9 views
0

私は3つのドロップダウンリストControls.eachのドロップダウンが静的な値が含まれているアイテムは(のSelectedIndexChangedイベントの)最初のドロップダウンで選択されたとき、私は何をする必要があるか1,2,3,4 が持っている同じ項目べき他の2つのドロップダウンで選択してくださいドロップダウンリストの選択

+1

大丈夫です!それで何がうまくいかなかったのですか? – Shoban

答えて

1

あなたがしていることはなんですか?分離コードで

<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> 

:ASPXコードで

DropDownList.SelectedValueが読み取り専用であるため

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を入力すると、動作しません。

すべてのDDLのうちSelectedIndexを送信者のものに設定したわけではありません。 あなたの例のシナリオでそれを使用しますが、あなたのDDLの1つに他のものと異なる順序でListItemがあると、コードが壊れます。私の意見では、これは危険な練習になりますが、YMMV。

また、SetValueメソッドを一般化することを決めた場合(私は多くの場合、プロジェクト全体のDropDownListコントロールに拡張メソッドとして追加します)、DDLにターゲット値が見つからない場合を処理する必要があります例外をスローすることによって。 FindByTextを使用してSetTextバージョンを作成することもできます。

+0

助けてくれてありがとう – chamara

1

2番目と3番目のドロップダウンのselectedvalueプロパティを最初の選択された値に設定します。ドロップダウンをautopostback = "true"に設定して、サーバーにポストバックし、適切に設定することができます。

または、変更クライアントイベントが最初に発生したときに、クライアントサイドJavaScriptを使用して他の選択要素のselectedindexプロパティを変更します。

0

あなたがする必要があるのは、このようなあなたの他のドロップダウンリストのSelectedIndex設定されている:

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

言及を忘れた...値はすべてのドロップダウンで同じ順序ではありません。これは問題ありません... – chamara

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'はエラーを引き起こすでしょう。 –

+1

@ジャスティン:いいえ、そうではありません。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.selectedvalue.aspx。私は自分のコードbtwをテストしました。 – volpav

+0

あなたが正しいかのように見えます。私は最近のプロジェクトでこれが私に問題を引き起こしたと断言できましたが、多分私は他のことを考えています。私の方法の誤りを私に見せてくれるあなたのリンクに+1してください。 –