2016-12-20 8 views
-1

Derzeit Winforms und versuchen, Elemente in einer Listbox zu bearbeiten, um nach oben und unten zu bewegen, und ich habe ein paar Hinweise auf hier gefolgt und ich bekomme einen Fehler 'Elemente Sammlung kann nicht geändert werden, wenn die DataSource Eigentum ist festgelegt.C# WinForms DataSource Eigenschaft Fehler

Dies ist mein Code.

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

Was '_items' ist und woher es kam? Der Fehler klingt wie eine Listcontrol-Sammlung. Wie der Fehler angibt, verwenden Sie die Sammlung * oder * eine Datenquelle – Plutonix

Antwort

1

Sie können nicht entfernen oder Elemente hinzufügen, während das Steuerelement an eine Datenquelle gebunden ist.

für Ihre Zwecke, vielleicht sollten Sie vollständig mit DataBind vermeiden und stattdessen nur kopieren Sie die Daten wie folgt aus:

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

Verwenden Sie stattdessen AddRange, es wäre schneller. –

Verwandte Themen