所以我有两个组合框(comboBoxFromAccount和comboBoxToAccount)。每个都有相同的数据源,即AccountsList(从父表单传递的BankAccount对象列表)。
我想这样做,如果在其中一个组合框中选择了一个项目,则在另一个组合框中将不再可选。我尝试这样做的方法是将BankAccounts列表从comboBoxFromAccount复制到comboBoxTo帐户,并从comboBoxToAccount中删除所选的comboBoxFromAccount索引。
我认为我很接近,但似乎发生的事情是我有一个空白的comboBoxToAccount。
这是我的代码:
private BankAccountCollection accountsListTransferTo = new BankAccountCollection();
// public property for passing collection data to the dialog
public BankAccountCollection AccountsList
{
get { return accountsListTransferTo; }
set { accountsListTransferTo = value; }
}
// Initial loading
private void TransferFundsDialog_Load(object sender, EventArgs e)
{
textBoxAmount.Text = String.Empty;
textBoxAmount.Select();
comboBoxFromAccount.DataSource = AccountsList;
accountsListTransferTo.AddRange(AccountsList); // Copy content
accountsListTransferTo.Remove(comboBoxFromAccount.SelectedItem as BankAccount); // Remove item
comboBoxToAccount.DataSource = accountsListTransferTo; // Data binding
}
private void comboBoxFromAccount_SelectedIndexChanged(object sender, EventArgs e)
{
accountsListTransferTo.Clear(); // Clear list, if you don't to it, AddRange will just add more items.
accountsListTransferTo.AddRange(AccountsList); // Copy ALL accounts
accountsListTransferTo.Remove(comboBoxFromAccount.SelectedItem as BankAccount); // Remove selected, so user cannot transfer to same account
// Refresh data binding
comboBoxToAccount.DataSource = null;
comboBoxToAccount.DataSource = accountsListTransferTo;
// Select very first item in "TO" combobox
comboBoxToAccount.SelectedIndex = 0;
}
帮助将不胜感激。
答案 0 :(得分:0)
尝试删除该行
comboBoxToAccount.DataSource = null;
我对组合框有问题的模糊回忆。
答案 1 :(得分:0)
我可以看到的另一个可能的问题是您使用 accountsListTransferTo 作为主集合和从中删除所选帐户的集合。每次调用 comboBoxFromAccount_SelectedIndexChanged 时,另一个帐户将从集合中消失(因此也会从 comboBoxToAccount 中的可用选项中消失)。
我认为我已经看到组合框的行为方式是在添加新项目时触发SelectedIndexChanged(或类似)事件。如果是这种情况,它将解释空的 comboBoxToAccount ,因为 comboBoxFromAccount_SelectedIndexChanged 将为每个添加的银行帐户运行一次,实质上是从主列表中删除它们然后重新绑定减少名单。您可以使用事件处理程序中的断点轻松验证这一点。