2014-09-19 5 views
1

У меня есть combo box, который прилагается к datasourceИсключить пункты поле со списком, которые держали в DataGridView

cboPies.DataSource = GetPies(txtCustomer.Text) 
cboPies.DisplayMember = "PIES_DESCN" 
cboPies.ValueMember = "PIES_ID" 

У меня также есть datagridView, который имеет список вариантов, которые выбрали из combo box.

Я пытаюсь удалить элементы для combo box, если у них уже есть элемент на Datagridview или предупредить пользователя, что он уже выбран.

With dgvSelectedPies 
    For indexDGV As Integer = 0 To .Rows.Count - 1 Step 1 
     'cboSpecialty.Items.Remove(.Rows(indexDGV).Cells("PIES_DESCN").Value) 
     cboSpecialty.Items.Remove(.Rows(indexDGV).Cells("PIES_ID").Value) 

    Next 
End With 
+0

Вы получаете сообщение об ошибке при запуске кода? – Supersnake

+0

Нет, у него нет ошибки, но она, похоже, не удаляет элементы, которые уже находятся в представлении datagridview. – user3191666

ответ

1

Если вы используете источник данных, то вы не должны быть взаимодействующий с Items коллекции. The MSDN documentation says:

Источник данных может представлять собой базу данных, веб-службу или объект, который может позже быть использован для создания элементов управления с привязкой к данным. Когда свойство DataSource установлено, коллекция предметов не может быть изменена.

Вместо этого вы должны управлять своей собственной коллекцией, используя BindingList.

Пример в C# (пардон):

protected BindingList<Pies> ComboDataSource { get; set; } 

...

ComboDataSource = new BindingList<Pies>(GetPies(txtCustomer.Text)); 
cboPies.DataSource = ComboDataSource; 
cboPies.DisplayMember = "PIES_DESCN" 
cboPies.ValueMember = "PIES_ID" 

...

if(ComboDataSource.Contains(pieInDataGrid)) 
{ 
    ComboDataSource.Remove(pieInDataGrid); 
} 
Смежные вопросы