2 combo boxes populated with 1 array, remove vaule from combo 2 if its selected in combo1

I have 2 combo boxes on a form for approvals.  I have 1 array loading the names of everyone from 2 sepeate binding sources as you can see in the code below.  Everything works fine, except when I try to remove the item from the second box if its been selected in the first.

string[] approvers = { "Person 1", "Person2", "Parson3", "Person4" };
BindingSource source1 = new BindingSource();
BindingSource source2 = new BindingSource();
source1.DataSource = approvers;
cmbFirstApprover.DataSource = source1;
source2.DataSource = approvers;
cmbSecondApprover.DataSource = source2;
        
private void cmbFirstApprover_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Remove person from second combo
            string firstApprover = cmbFirstApprover.Text;

             //source2.Remove(firstApprover);

             //cmbSecondApprover.Items.Remove(firstApprover);
          }

Open in new window



source2.Remove(firstApprover);
This generats the error below when the approval form loads, even though its in the selectedIndexChanged    
NotSupportedException was unhandled by user code
Collection was of a fixed size  

This generates the error below when I make a selection on the first combo box.
ArgumentException was unhandled
Items collection cannot be modified when the DataSource property is set.
LVL 9
dustockAsked:
Who is Participating?
 
dustockAuthor Commented:
I switched my code to use List <string> approvers = new List <string>(); instead and I was able to remove the item from the list before I populate the second combobox.
0
 
strickddCommented:
As the error says, you can't remove items when a combo box is bound to a data source. You will have to manually add the items.

string[] approvers = { "Person 1", "Person2", "Parson3", "Person4" };

foreach(string approver in approvers)
{
    cmdFirstApprover.Items.Add(new ListItem(approver));
    cmbSecondApprover.Items.Add(new ListItem(approver));
}

Open in new window

0
 
dustockAuthor Commented:
strickdd, all this does for me is get rid of the error messages.  It doest remove the item from the second combo box.  My code to display it worked, its my code to remove the item that's not working.

Thanks,

Dustin
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
strickddCommented:
Did you add back in the code to remove the item from the combo box when the first one is selected?
0
 
dustockAuthor Commented:
I sure did, it didnt do anything.
0
 
strickddCommented:
Can you post your code?
0
 
dustockAuthor Commented:
I tried both ways to remove again, neither one does anything.

private void TE_IIDB_APPROVAL_Load(object sender, EventArgs e)
{
string[] approvers = { "Person 1", "Person2", "Parson3", "Person4" };

foreach (string approver in approvers)
{
     cmbFirstApprover.Items.Add(new ListItem(approver));
     cmbSecondApprover.Items.Add(new ListItem(approver));
}
}

private void cmbFirstApprover_SelectedIndexChanged(object sender, EventArgs e)
{
     string firstApprover = cmbFirstApprover.Text;
            
      if (cmbFirstApprover.Text != "")
      {
         source2.Remove(firstApprover);
         //cmbSecondApprover.Items.Remove(firstApprover);
       }
}

Open in new window

0
 
strickddCommented:
You're no longer using source2 because you are manually binding the information. Just remove the item from the cmbSecondApprover:

private void cmbFirstApprover_SelectedIndexChanged(object sender, EventArgs e)
{
     string firstApprover = cmbFirstApprover.Text;
            
      if (cmbFirstApprover.Text != "")
      {
         cmbSecondApprover.Items.Remove(firstApprover);
       }
} 

Open in new window

0
 
dustockAuthor Commented:
I tried the cmbSecondApprove.Items.Remove, and that didnt work either.
0
 
strickddCommented:
That is interesting... the other suggestion I have would be this:

string[] approvers = { "Person 1", "Person2", "Parson3", "Person4" };

private void TE_IIDB_APPROVAL_Load(object sender, EventArgs e)
{
foreach (string approver in approvers)
{
     cmbFirstApprover.Items.Add(new ListItem(approver));
     cmbSecondApprover.Items.Add(new ListItem(approver));
}
}

private void cmbFirstApprover_SelectedIndexChanged(object sender, EventArgs e)
{
     string firstApprover = cmbFirstApprover.Text;
            
      if (cmbFirstApprover.Text != "")
      {
           cmdSecondApprover.Items.Clear();

           foreach (string approver in approvers)
{
if(approver != firstApprover)
{
   cmbSecondApprover.Items.Add(new ListItem(approver));
}
}
       }
} 

Open in new window

0
 
dustockAuthor Commented:
I'll give that a shot and update you tomorrow.  Thanks
0
 
dustockAuthor Commented:
using List <string> I was able to remove the item before populating the second combo box.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.