簡體   English   中英

從組合框列表中選擇兩個組合框中的值?

[英]Select Values from two combobox from a list of combobox?

我在表單上放置了六個組合框,同時我希望用戶可以從最多兩個組合框中選擇值。 為此,我有一個計數器變量,每當組合框的selectedindex更改但未達到解決方案時,該變量都會增加。

你們能解釋我該怎么做嗎?

我為您創建了一個示例。 我希望它會有用。

ASP.Net頁面:

<form id="form1" runat="server">
    <div>
        <div>
            <label>Combobox 1</label>
            <asp:DropDownList runat="server" OnSelectedIndexChanged="Unnamed1_SelectedIndexChanged" AutoPostBack="True">
                <asp:ListItem>Select</asp:ListItem>
                <asp:ListItem>Combo-1-1</asp:ListItem>
                <asp:ListItem>Combo-1-2</asp:ListItem>
            </asp:DropDownList>
        </div>
        <div>
            <label>Combobox 2</label>
            <asp:DropDownList runat="server" OnSelectedIndexChanged="Unnamed1_SelectedIndexChanged" AutoPostBack="True">
                <asp:ListItem>Select</asp:ListItem>
                <asp:ListItem>Combo-2-1</asp:ListItem>
                <asp:ListItem>Combo-2-2</asp:ListItem>
            </asp:DropDownList>
        </div>
        <div>
            <label>Combobox 3</label>
            <asp:DropDownList runat="server" OnSelectedIndexChanged="Unnamed1_SelectedIndexChanged" AutoPostBack="True">
                <asp:ListItem>Select</asp:ListItem>
                <asp:ListItem>Combo-3-1</asp:ListItem>
                <asp:ListItem>Combo-3-2</asp:ListItem>
            </asp:DropDownList>
        </div>
        <div>
            <label>Combobox 4</label>
            <asp:DropDownList runat="server" OnSelectedIndexChanged="Unnamed1_SelectedIndexChanged" AutoPostBack="True">
                <asp:ListItem>Select</asp:ListItem>
                <asp:ListItem>Combo-4-1</asp:ListItem>
                <asp:ListItem>Combo-4-2</asp:ListItem>
            </asp:DropDownList>
        </div>
        <div>
            <label>Combobox 5</label>
            <asp:DropDownList runat="server" OnSelectedIndexChanged="Unnamed1_SelectedIndexChanged" AutoPostBack="True">
                <asp:ListItem>Select</asp:ListItem>
                <asp:ListItem>Combo-5-1</asp:ListItem>
                <asp:ListItem>Combo-5-2</asp:ListItem>
            </asp:DropDownList>
        </div>
        <div>
            <label>Combobox 6</label>
            <asp:DropDownList runat="server" OnSelectedIndexChanged="Unnamed1_SelectedIndexChanged" AutoPostBack="True" Height="19px">
                <asp:ListItem>Select</asp:ListItem>
                <asp:ListItem>Combo-6-1</asp:ListItem>
                <asp:ListItem>Combo-6-2</asp:ListItem>
            </asp:DropDownList>
        </div>
        <div>
            <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
        </div>
    </div>

</form>

ASP.Net代碼隱藏

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ViewState["DropdownSelectLimit"] = 0;
        }
    }

    protected void Unnamed1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ViewState["DropdownSelectLimit"] != null)
        {
            if ((int)ViewState["DropdownSelectLimit"] < 2)
            {
                int count = (int)ViewState["DropdownSelectLimit"];
                count++;
                ViewState["DropdownSelectLimit"] = count;
            }
            else
            {
                DropDownList dropDown = (DropDownList)sender;
                dropDown.SelectedIndex = 0;
                Label1.Text = "You can't select any option anymore";
            }
        }
    }

如果您有任何問題,請在評論中問我:)

我為Winforms創建了一個安裝程序,因為您是否想要Winforms或ASP.Net尚不清楚

我不會處理您應該如何填充組合框,我敢肯定您知道如何做到這一點,無論是靜態填充還是動態填充。

我的解決方案(雖然很粗魯)使您可以將名為HandleComboBoxSelectedIndexChanged的簡化處理程序鏈接到每個組合框SelectionChanged事件。 這可以是SelectedItemChanged,SelectedValueChanged或SelectedIndexChanged。

非常重要:每個組合都需要一個空值。

//will hold a list of your combobox names
private List<string> SelectedCombos;

//form load: Link the events to the correct handler
private void Form_Load()
{
    foreach(var combo in Controls)
    {
        if(combo is ComboBox)
            combo.SelectedValueChanged += HandleComboBoxSelectedIndexChanged;
    }
}

//will handle the selectedIndexOrItemchanged event
private void HandleComboBoxSelectedIndexChanged(object sender, EventArgs e)
{
    if(SelectedCombos = null)
        SelectedCombos = new List<string>();

    var combo = (ComboBox)sender;
    if(combo.SelectedValue == null)
        if(!SelectedCombos.Exist(combo.Name))
            SelectedCombos.Remove(combo.Name);
    else
        if(!SelectedCombos.Exist(combo.Name) && SelectedCombos.Count < 2)
        SelectedCombos.Add(combo.Name)

    SetComboAvailability();
}

每當選擇兩個連擊時,另一個有用的功能可能會使啟用狀態為false。 這意味着您的用戶只能從2個選定的組合中選擇,直到其中一個被重置為空位置為止。 這樣,您的用戶只能選擇可能的方式。

//set the combos availability, less then 2 selections ok, own selection also ok else not ok
private void SetComboAvailability()
{
    foreach(var combo in Controls)
    {
        if(combo is ComboBox)
            combo.Enabled = SelectedCombos.Count < 2 || SelectedCombos.Contains(combo.Name);
    }
}

下面是一個小示例,說明如何根據組合名稱檢索組合中的所有值。

//Something for handling all the values
private void RetrieveValues()
{
    foreach(var v in SelectedCombos)
    { 
        var combo = this.Controls.Find(v);
        if(combo is ComboBox)
        {           
            //do something with the selectedValue
            var val = combo.SelectedValue; // or selecteditem
            MessageBox.Show(string.Format("Control {0} has value {1}", combo.Name, val);
        }
    }
}

如果您不明白,請隨時提出。

也:

EventArgs屬性可能會根據所選事件而改變:

請執行:_comboBox1.SelectedValueChanged + =(VS中的TAB TWICE)以查看自動代碼生成的外觀。 (總是方便)

例:

_comboBox1.SelectedValueChanged += _comboBox1_SelectedValueChanged;

private void _comboBox1_SelectedValueChanged(object sender, EventArgs e){}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM