如何使用button_click从列表中删除项目

时间:2014-11-08 16:59:36

标签: c# list button

我有一个用“foreach”填充的列表,然后我想用按钮删除所选项目......我这样做:

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

1 个答案:

答案 0 :(得分:2)

您已从组合的项目列表中删除该项目,而不是从GameAdd类的myList中删除。当你重新填充你的组合列表时,你读了GameAdd静态myList中仍然存在的上一个项目

因此,假设您的列表中的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对象的属性中没有空格。如果不是这种情况,那么在将它们添加到组合框中时,在字符串之间添加某种分隔符。例如,一个点,然后使用该点进行拆分。

更好的方法是使用组合框的DisplayMemberValueMemberDataSource属性,这样您就可以使用属性作为键来识别GamesAdd对象而不使用繁琐的工具分割