2012-12-05 3 views
2

Я ищу помощь, у меня есть два списка, которые добавляют данные в один и тот же список, и он отображает их в виде сводки, я хотел бы знать, как позволить пользователю перемещаться индекс вверх или вниз в списке.Как разрешить пользователю изменять порядок в списке списка

Элементы добавляются здесь

private void BtnAddpickup_Click(object sender, EventArgs e) 
    { 
      /* 
      * This method creates a new pickup object, allows the user to 
      * enter details and adds it to the List 
      * 
      */ 

     Pickupform.pickup = new Pickups(); 
     //New Visit- note added to the pickupform object 

     Pickupform.ShowDialog(); 
     //Show the pickupForm. ShowDialog ensures that the form has the exclusive focus until it is closed. 

     if (Pickupform.pickup != null) 
     //if null then the "cancel" button was pressed 
     { 
      Pickups newpic = Pickupform.pickup; 
      //Get the Pickup object from the form 

      thePickup.addPickups(newpic); 
      //Add the visit to the list 
     } 
     updateList(); 
     //Update the list object to reflect the Pickups in the list 
    } 

и это

public Pickups getPickups(int index) 
    { 
     //Return the pickup object at the <index> place in the list 

     int count = 0; 
     foreach (Pickups pic in pickups) 
     { 
      //Go through all the pickup objects 
      if (index == count) 
       //If we're at the correct point in the list... 
       return pic; 
      //exit this method and return the current visit 
      count++; 
      //Keep counting 
     } 
     return null; 
     //Return null if an index was entered that could not be found 
    } 

Это то же самое для моего другого класса, так что любая помощь будет оценена

ответ

4

Вы можете попробовать что-то вроде этого. Следующий код предполагает форму Windows, содержащую ListBox с именем mainListBox, кнопку с именем upButton и кнопку с именем downButton.

public partial class Form1 : Form 
{ 
    private class Person 
    { 
     public string LastName { get; set; } 

     public string FirstName { get; set; } 

     public override string ToString() 
     { 
      return string.Format("{0}, {1}", LastName, FirstName); 
     } 
    } 

    public Form1() 
    { 
     this.InitializeComponent(); 

     this.mainListBox.SelectionMode = SelectionMode.One; 

     this.PopulateListBox(); 
    } 

    private void PopulateListBox() 
    { 
     this.mainListBox.Items.Add(new Person() { FirstName = "Joe", LastName = "Smith" }); 
     this.mainListBox.Items.Add(new Person() { FirstName = "Sally", LastName = "Jones" }); 
     this.mainListBox.Items.Add(new Person() { FirstName = "Billy", LastName = "Anderson" }); 
    } 

    private void upButton_Click(object sender, EventArgs e) 
    { 
     if (this.mainListBox.SelectedIndex > 0) 
     { 
      int selectedIndex = this.mainListBox.SelectedIndex; 
      object selectedItem = this.mainListBox.SelectedItem; 

      this.mainListBox.Items.RemoveAt(selectedIndex); 
      this.mainListBox.Items.Insert(selectedIndex - 1, selectedItem); 

      this.mainListBox.SelectedIndex = selectedIndex - 1; 
     } 
    } 

    private void downButton_Click(object sender, EventArgs e) 
    { 
     if (this.mainListBox.SelectedIndex > -1 && 
      this.mainListBox.SelectedIndex < this.mainListBox.Items.Count - 1) 
     { 
      int selectedIndex = this.mainListBox.SelectedIndex; 
      object selectedItem = this.mainListBox.SelectedItem; 

      this.mainListBox.Items.RemoveAt(selectedIndex); 
      this.mainListBox.Items.Insert(selectedIndex + 1, selectedItem); 

      this.mainListBox.SelectedIndex = selectedIndex + 1; 
     } 
    } 
} 

Это будет работать, только если вы добавляете элементы в ListBox, используя метод ObjectCollection.Add. Если вы привязываетесь к данным, вы можете обновить фактический источник данных и использовать BindingContext ListBox для обновления.

private List<Person> people = new List<Person>(); 

private void PopulateListBox() 
{ 
    this.people.Add(new Person() { FirstName = "Joe", LastName = "Smith" }); 
    this.people.Add(new Person() { FirstName = "Sally", LastName = "Jones" }); 
    this.people.Add(new Person() { FirstName = "Billy", LastName = "Anderson" }); 

    this.mainListBox.DataSource = people; 
} 

private void upButton_Click(object sender, EventArgs e) 
{ 
    if (this.mainListBox.SelectedIndex > 0) 
    { 
     int selectedIndex = this.mainListBox.SelectedIndex; 
     Person selectedItem = this.mainListBox.SelectedItem as Person; 

     this.people.RemoveAt(selectedIndex); 
     this.people.Insert(selectedIndex - 1, selectedItem); 

     this.mainListBox.SelectedIndex = selectedIndex - 1; 

     this.RefreshListSource(); 
    } 
} 

private void RefreshListSource() 
{ 
    CurrencyManager boundList = this.mainListBox.BindingContext[this.people] as CurrencyManager; 
    boundList.Refresh(); 
} 
Смежные вопросы