2014-11-08 2 views
-3

У меня есть список, который я заполняю «foreach», а затем хочу удалить выбранный элемент с помощью кнопки ... Я делаю это так:Как удалить элемент из списка с помощью кнопки button_click

private void btn1_Copy1_Click(object sender, RoutedEventArgs e) 
{ 
    if (this.MyList.SelectedIndex >= 0) 
    { 
     this.MyList.Items.RemoveAt(this.MyList.SelectedIndex); 
    }     
} 

Но тогда, когда я нажимаю другую кнопку, чтобы добавить элемент в список представляется предыдущий пункт, который я удален, а также.

private void btn1_Click(object sender, RoutedEventArgs e) 
{ 
    ComboBoxItem curItem = (ComboBoxItem)Games.SelectedItem; 
    string SelectedValue = curItem.Content.ToString(); 


    GamesAdd myOrder = new GamesAdd(SelectedValue, Convert.ToInt16(price.Text), Convert.ToInt16(quant.Text), 
                (Convert.ToInt16(price.Text)*Convert.ToInt16(quant.Text))); 
    GamesAdd.myList.Add(myOrder); 
    MyList.Items.Clear(); 
    int i=0; 
    foreach (var item in GamesAdd.myList) 
    { 
     i++; 
     MyList.Items.Add(i + ". " + item.GameName + " " + item.GameQuant + " x " + item.GamePrice +" " + item.TotalPrice); 


    } 

} //This is the add button code 
+0

пожалуйста, дайте нам увидеть вашу кнопку добавления код –

+0

, вы можете сделать это, выполнив поиск Google для начинающих. Есть многочисленные примеры того, как это сделать в веб-старте здесь [How to Many, C# Examples] (http://www.google.com) [Список .Remove Method] (http://msdn.microsoft.com/en-us/library/cd666k3e (v = vs.110) .aspx), пожалуйста, приложите больше усилий! – MethodMan

+0

не вставляйте свой код в качестве комментария. Обновите свой вопрос и вставьте дополнительный код в свой исходный вопрос. – MethodMan

ответ

2

Вы удалили элемент из списка товаров вашего комбо, а не из myList класса GameAdd. Когда вы заселить список ваших комбо вы readd предыдущий пункт все еще присутствует в статическом MyList GameAdd

Таким образом, если предположить, что у вас есть поле GameName, как уникальный в своем списке, вы можете попробовать

private void btn1_Copy1_Click(object sender, RoutedEventArgs e) 
{ 
    if (this.MyList.SelectedIndex >= 0) 
    { 
     string itemName = this.MyList.Items[this.MyList.SelectedIndex].ToString(); 
     string[] gameParts = itemName.Split(' '); 
     GamesAdd g = GamesAdd.myList.FirstOrDefault(x => x.GameName == gameParts[1]); 
     GamesAdd.myList.Remove(g); 
     this.MyList.Items.RemoveAt(this.MyList.SelectedIndex); 
    }     
} 

Для этого для работы вам не нужно иметь пробелов в свойстве объекта GamesAdd, добавленного в элементы списка со списком. Если это не так, добавьте какой-то разделитель между строками, когда вы добавите их в свой список. Например, точку, а затем разделить с помощью этой точки.

Лучше было бы использовать DisplayMember, ValueMember и DataSource свойство выпадающего списка, чтобы вы могли использовать свойство в качестве ключа для идентификации объекта GamesAdd без использования громоздкого раскола

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