2

dropdown1 の値が選択されたときに、dropdown1 で選択された項目を dropdown2 から削除する次のコードがあります。

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        DropDownList2.Items.Remove(DropDownList1.SelectedItem);

    }

それはうまくいきます。ただし、ページロード時に同じコードを追加しようとしましたが、何も選択されていないため、推測している値を削除していません。どうすればこれを達成できますか?

 protected void Page_Load(object sender, EventArgs e)
    {

        DropDownList2.Items.Remove(DropDownList1.SelectedItem);
    }

これは機能していないものです。何かアイデアはありますか?

4

2 に答える 2

0

私がやりたいのは、ドロップダウン2で、現在ドロップダウン1で選択されているものを表示しないことです。

あなたの問題は何ですか、ページロードですべてが「リセット」されます。したがって、DropDownList1.SelectedItem は、リストの最初のアイテムまたはデフォルトのアイテムです。DropDownList1.SelectedItem が「One」の場合、DropDownList2 から常に「One」が削除されます。

必要なのは、DropDownList1 のボタンまたは OnSelectedIndexChanged イベントです。

以下で行ったことを試してみてください。うまくいきました。

<form id="form1" runat="server">
<div>
    <asp:DropDownList ID="ddlOne" runat="server" OnSelectedIndexChanged="ddlOne_OnSelectedIndexChanged" AutoPostBack="true" />
    <br />
    <br />
    <asp:DropDownList ID="ddlTwo" runat="server" />
    <br />
    <br />
    <asp:Button ID="btRemove" runat="server" Text="Remove" 
        onclick="btRemove_Click" />
</div>
</form>

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // Bind data
            BindLists();
        }
    }

    /// <summary>
    /// Removes whatever Selected Item from ddlTwo that is 
    /// currently selected in ddlOne.
    /// </summary>
    private void RemoveFromTwoWhatIsSelectedInOne()
    {
        ddlTwo.Items.Remove(ddlOne.SelectedItem);
    }

    /// <summary>
    /// Click handler for btRemove. Calls the method 
    /// RemoveFromTwoWhatIsSelectedInOne()
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btRemove_Click(object sender, EventArgs e)
    {
        RemoveFromTwoWhatIsSelectedInOne();
    }

    /// <summary>
    /// OnSelectedIndexChanged handler for ddlOne. Calls the method 
    /// RemoveFromTwoWhatIsSelectedInOne()
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ddlOne_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        RemoveFromTwoWhatIsSelectedInOne();
    }

    /// <summary>
    /// Binds a list of names the two Drop Down Lists, ddlOne and ddlTwo, by using 
    /// the same Data Source from the Manager.
    /// </summary>
    private void BindLists()
    {
        // Get the data
        Manager theManager = new Manager();
        List<Names> theNames = theManager.GetNames();

        // Assign the data source
        ddlOne.DataSource = theNames;
        ddlTwo.DataSource = theNames;

        // Bind each drop down list
        ddlOne.DataBind();
        ddlTwo.DataBind();
    }
于 2012-05-03T17:47:57.137 に答える
0

やってみた?

if(!IsPostback)
{
    DropDownList2.Items.Remove(DropDownList1.SelectedItem);
}

あなたのPage_Loadイベントでは?また、どのようにデータをバインドしていますか? の代わりにSelected_IndexChanged適切なものを使用してみませんか? それがこのコードが属する場所のように私には思えます。DropdowsListPage_Load

于 2012-05-03T16:50:29.743 に答える