[英]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.