2016-12-20 9 views
-1

В настоящее время использование Winforms и попытка редактировать элементы в списке для перемещения вверх и вниз, и я следил за несколькими руководствами здесь, и я продолжаю получать ошибку. «коллекция элементов не может быть изменена, когда DataSource свойство установлено. 'C# WinForms Ошибки свойств DataSource

Это мой код.

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

    } 

    private void button2_Click(object sender, EventArgs e) 
    { 

     //Add button was clicked 

     x = x + 1; 

     _items.Add("New item " + x); 

     //Change the data source 
     listBox1.DataSource = null; 
     listBox1.DataSource = _items; 

    } 

    private void button3_Click(object sender, EventArgs e) 
    { 

     //The remove button 
     int selectedIndex = listBox1.SelectedIndex; 

     try 
     { 

      //Removes the item in the list 
      _items.RemoveAt(selectedIndex); 
      x = x - 1; 

     } 

     catch 
     { 
     } 

     listBox1.DataSource = null; 
     listBox1.DataSource = _items; 

    } 

    private void button4_Click(object sender, EventArgs e) 
    { 

     x = 0; 

     _items.Clear(); 

     listBox1.DataSource = null; 
     listBox1.DataSource = _items; 

    } 

    private void button5_Click(object sender, EventArgs e) 
    { 

     MoveUp(); 

    } 

    private void button6_Click(object sender, EventArgs e) 
    { 

     MoveDown(); 

    } 

    public void MoveUp() 
    { 

     MoveItem(-1); 

    } 

    public void MoveDown() 
    { 

     MoveItem(1); 

    } 

    public void MoveItem(int direction) 
    { 

     //Checking selected item 
     if (listBox1.SelectedItem == null || listBox1.SelectedIndex < 0) 
      return;//No selected item, nothing will happen 

     //Calculating new index using move direction 
     int newIndex = listBox1.SelectedIndex + direction; 

     //Checking bounds of th range 
     if (newIndex < 0 || newIndex >= listBox1.Items.Count) 
      return; //Index out of range - nothing will happen 

     object selected = listBox1.SelectedItem; 

     //Removing removable element 
     listBox1.Items.Remove(selected); 
     //Insert it into new position 
     listBox1.Items.Insert(newIndex, selected); 
     //restore selection 
     listBox1.SetSelected(newIndex, true); 



    } 


} 

}

+0

Что такое '_items' и откуда она взялась? Ошибка заставляет это звучать, как это коллекция listcontrol. Поскольку ошибка указывает использование коллекции * или * источник данных – Plutonix

ответ

1

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

Для ваших целей, возможно, вам следует избегать использования DataBind полностью, и вместо того, чтобы просто скопировать данные, как это:

foreach (var item in _items) 
{ 
    myListBox.Items.Add(item); 
} 
+0

Вместо этого используйте AddRange, это будет быстрее. –

 Смежные вопросы

  • Нет связанных вопросов^_^