简体   繁体   English

如何从C#中的列表中删除对象

[英]how to remove an object from a list in C#

Hi guys i am working on a small project where i am adding, removing and updating items in a file rather than database. 嗨,大家好,我正在做一个小项目,我在其中添加,删除和更新文件而不是数据库中的项目。 i have a listview and list where i add items in listview in the UI and object in a list.but when i remove the item is removed from a listview but not the object from the list and throwing exception.the code is the following and line of the problem and problem is indicated. 我有一个列表视图和列表,我在UI中的列表视图中添加项目,并在列表中添加对象。但是当我删除该项目时,它是从列表视图中删除的,而不是列表中的对象并抛出异常。代码如下问题和问题的指示。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;


   namespace Address_Book_students
  {
    public partial class Form1 : Form
  {
    public Form1()
    {
        InitializeComponent();
    }
    List<student> boy = new List<student>();

    private void Form1_Load(object sender, EventArgs e)
    {
        String path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        if (!Directory.Exists(path + "\\Address_project_irfan"))
            Directory.CreateDirectory((path + "\\Address_project_irfan"));
        if (!File.Exists(path + "\\Address_project_irfan\\setting.xml"))
            File.Create((path + "\\Address_project_irfan\\setting.xml"));

    }

    private void button2_Click(object sender, EventArgs e)
    {
        student b = new student();
        b.Name = textBox1.Text;
        b.Address = textBox2.Text;
        b.Email = textBox3.Text;
        b.Birthday = dateTimePicker1.Value;
        b.Additional_info = textBox4.Text;
        listView1.Items.Add(textBox1.Text);
        boy.Add(b); // when i add the items in the listview1 at same time object is 
                    // object is b is added to the lis boy
        textBox1.Text = "";
        textBox2.Text = "";
        textBox3.Text = "";
        dateTimePicker1.Value = DateTime.Now;
        textBox4.Text = "";


    }
    public void Remove()
    {
       listView1.Items.Remove(listView1.SelectedItems[0]);
        boy.RemoveAt(listView1.SelectedItems[0].Index);//But when i remove items from
                                                       //the listview1 the items deleted
                                                       //from the listview but the object
                                                       // is not deleting from the list 
                                                       //boy throwing the exception(Value of 0 is not
                                                       //a valid arguement) what the problems here with list?


    }

    private void button3_Click(object sender, EventArgs e)
    {
        Remove();
    }



}
public class student
{
    public string Name
    {
        get;
        set;

    }
    public string Address
    {
        get;
        set;

    }
    public string Email
    {
        get;
        set;

    }
    public DateTime Birthday
    {
        get;
        set;

    }
    public string Additional_info
    {
        get;
        set;

    }

}
 }

You're using listView1.SelectedItems[0] to see which item is selected - twice, once for removing it from the ListView and another time to remove it from your List. 您正在使用listView1.SelectedItems[0]查看被选中的项-两次,一次是从ListView中删除它,另一次是从列表中删除它。

Unfortunately, after you remove it from your ListView, listView1.SelectedItems[0] no longer exists, so you get an exception. 不幸的是,将其从ListView中删除后, listView1.SelectedItems[0]不再存在,因此会出现异常。

Easiest way to fix this - remove the item from your List first, then from the ListView. 解决此问题的最简单方法-首先从列表中删除项目,然后从ListView中删除项目。

I think you would be better off getting the object, then removing that from the list then rebinding the listview. 我认为您最好先获取对象,然后从列表中删除该对象,然后重新绑定listview。

student stu = (student)boy.Where(s => s.Id == (int)listView1.SelectedValue)).Single();
boy.Remove(stu);

Then rebind your listview. 然后重新绑定您的列表视图。 This does suggest you have an Id for the boy so its unique. 这确实表明您为男孩有一个ID,因此它是唯一的。 But you can use one of the other fields, but you want it to be unique. 但是您可以使用其他字段之一,但是希望它是唯一的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM