0

こんにちは、データベースではなくファイル内のアイテムを追加、削除、更新する小さなプロジェクトに取り組んでいます。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;

    }

}
 }
4

2 に答える 2

3

どの項目が選択されているかを確認するために使用listView1.SelectedItems[0]しています.1回はListViewから削除し、もう1回はリストから削除します。

残念ながら、ListView から削除するとlistView1.SelectedItems[0]存在しなくなるため、例外が発生します。

これを修正する最も簡単な方法は、最初にリストから項目を削除してから、ListView から削除することです。

于 2013-06-08T21:49:03.743 に答える
0

オブジェクトを取得し、それをリストから削除してから、リストビューを再バインドする方がよいと思います。

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

次に、リストビューを再バインドします。これは、その男の子のIDを持っていることを示唆しているため、一意です. ただし、他のフィールドのいずれかを使用できますが、一意にする必要があります。

于 2013-06-08T22:03:41.607 に答える