Удалить выбранный элемент из списка с помощью кнопки из формы окна - PullRequest
0 голосов
/ 27 мая 2018

У меня есть список, и я хочу выбрать и элемент в нем и нажать кнопку, чтобы удалить его из базы данных.Я могу редактировать и сохранять нормально, но не удалять.

Текущий код:

private void button1_Click_3(object sender, EventArgs e)
{
     if (listBox1.Items.Count >= 1)
          {
               if (listBox1.SelectedValue != null)
               {
                    listBox1.Items.Remove(listBox1.SelectedItem);
                    System.Windows.Forms.MessageBox.Show("Item Deleted");
               }
          }
     else
     {
          System.Windows.Forms.MessageBox.Show("No ITEMS Found");
     }
}

Я получаю сообщение об ошибке:

Коллекция элементов не может быть изменена, когдаСвойство DataSource установлено.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018
private void button1_Click_3(object sender, EventArgs e)
{
     if (listBox1.Items.Count >= 1)
          {
               if (listBox1.SelectedValue != null)
               {
                    var items = (List<YourType>)listBox1.DataSource;

                    var item = (YourType)listBox1.SelectedValue;
                    listBox1.DataSource = null;
                    listBox1.Items.Clear();
                    items.Remove(item);
                    listBox1.DataSource = items;
               }
          }
     else
     {
          System.Windows.Forms.MessageBox.Show("No ITEMS Found");
     }
}

Это будет работать

0 голосов
/ 27 мая 2018

Предполагается, что в ListBox может быть выбрано несколько элементов.Ниже логика будет удалена из пользовательского интерфейса.Кроме того, при необходимости можно добавить логику для удаления элементов из базы данных.

Ниже приводится исключение, когда привязки данных отличаются от источников данных.

Коллекция элементов не может быть изменена, когдаУстанавливается свойство DataSource

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

Здесь элементы источника данных изменяются.

На вашей фактической ошибке.Вы не можете установить DataSource и изменить свойство Items.Это не разрешеноПравильный способ справиться с этим - добавить элементы в ваш источник данных.Эта вставка в ваш источник данных заставит элемент управления автоматически обновлять список.Элемент управления ListBox использует DS для хранения данных, поэтому все изменения должны проходить через это.В редком случае, когда вам нужно будет иметь возможность редактировать элементы напрямую, вам придется покончить с DataSource и вручную заполнить коллекцию элементов.Это обновление для источника данных обычно не требуется.

Ниже приведен код для сброса источника данных

if(listBox1.SelectedItems != null)
{
    // Assuming its List of string
    var items = listBox1.DataSource as List<string>;  

    // Remove multiple selected items
    var count = listBox1.SelectedItems.Count;    
    while(count != 0)
    {
        var selectedItem = listBox1.SelectedItems[count-1];
        if(items.ContainsKey(selectedItem))
        {
            items.Remove(selectedItem);
        }
        count--;
    }
    listBox1.DataSource = null;
    listBox1.Items.Clear();
    listBox1.DataSource = items;
}

Оптимизированный подход для хранения источника данных и его изменения для непосредственного обновления источника данных.Используйте тип ObservableCollection и обновите коллекцию для обновления пользовательского интерфейса.

public class NamesClass : DependencyObject
{
   public ObservableCollection<string> Names {get; private set; }
   public TestClass()
   {
            this.Names = new ObservableCollection<string>();
   }
}

Теперь включите класс DependencyObject в качестве источника данных и обновите коллекцию Names.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...