C# 表单关闭并从表单中删除项

C# 表单关闭并从表单中删除项,c#,xml,winforms,C#,Xml,Winforms,下面是完整的代码,其中有两个小问题需要我搜索,但什么都没有。第一个问题是,当我从列表中删除一个选定的项目时,它会删除它,但列表不会正确排序,因为它会删除它,但之前的项目是存在的项目,而不是我删除的项目。接下来是我的第二个问题,当我关闭表单时,从列表中删除的内容不会保存到xml文档中。所以,当我打开表单时,我没有移除任何东西,所有的东西都仍然存在 using System; using System.Collections.Generic; using System.ComponentModel;

下面是完整的代码,其中有两个小问题需要我搜索,但什么都没有。第一个问题是,当我从列表中删除一个选定的项目时,它会删除它,但列表不会正确排序,因为它会删除它,但之前的项目是存在的项目,而不是我删除的项目。接下来是我的第二个问题,当我关闭表单时,从列表中删除的内容不会保存到xml文档中。所以,当我打开表单时,我没有移除任何东西,所有的东西都仍然存在

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;
using System.Xml;
using System.Resources;

namespace SaveOpenXmlTest1._2
{

public partial class Form1 : Form
{
    //ListViewItem employeer = new ListViewItem();
    //List<Employer> employer = new List<Employer>();
    List<Employeer> employeer = new List<Employeer>();

    DialogResult result;
    string filename;
    string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    //private StreamWriter filewriter;
    //private StreamReader fileReader;

    public Form1()
    {
        InitializeComponent();
    }

    //List<Employ> employ = new List<Employ>();
    //List<Employ> employeer = new List<Employ>();

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void saveToolStripMenuItem_Click(object sender, EventArgs e)
    {
        using (SaveFileDialog filechooser = new SaveFileDialog())
        {
            filechooser.Filter = "Xml Files (*.xml)|*.xml";
            filechooser.CheckFileExists = false;
            result = filechooser.ShowDialog();
            filename = filechooser.FileName;
        }

        if (result == DialogResult.OK)
        {

            if (filename == string.Empty)
            {
                MessageBox.Show("Invalid File Name", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                try
                {
                    //FileStream output = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);

                    //filewriter = new StreamWriter(output);

                    /////////////////////////////////////////////////////////////////

                    //if (!Directory.Exists(filename + "Employment History"))
                    //    Directory.CreateDirectory(filename + "Empoyment History");

                    if (!File.Exists(filename))
                    {
                        XmlTextWriter xW = new XmlTextWriter(filename, Encoding.UTF8);

                        xW.Formatting = Formatting.Indented;
                        xW.WriteStartDocument();
                        xW.WriteStartElement("Employeer");
                        xW.WriteEndElement();
                        xW.Close();

                        XmlDocument xDoc = new XmlDocument();
                        xDoc.Load(filename);

                        foreach(XmlNode xNode in xDoc.SelectNodes("Employeer/Employeer"))
                        {
                            Employeer em = new Employeer();
                            em.Employeerc = xNode.SelectSingleNode("Name").InnerText;
                            em.StartDate = DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode("StartDate").InnerText));
                            em.EndDate = DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode("EndDate").InnerText));

                            employeer.Add(em);
                            listView1.Items.Add(em.Employeerc);

                        }

                        //xW = WriteStartElement("Emplyment"); 

                    }

                    saveToolStripMenuItem.Enabled = false;
                    saveAsToolStripMenuItem.Enabled = true;

                }
                catch (IOException)
                {
                    MessageBox.Show("Error Openning File", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

        }

    }

    private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
    {

    }

    class Employeer
    {
        public string Employeerc { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }            
    }


    private void button1_Click(object sender, EventArgs e)
    {
       Employeer em = new Employeer();
        em.Employeerc = textBox1.Text;
        em.StartDate = dateTimePicker1.Value;
        em.EndDate = dateTimePicker2.Value;

        employeer.Add(em);

        listView1.Items.Add(em.Employeerc);
        textBox1.Text = "";
        dateTimePicker1.Value = DateTime.Now;
        dateTimePicker2.Value = DateTime.Now;
    }


    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if(listView1.SelectedItems.Count == 0 )
            return;

        textBox1.Text = employeer[listView1.SelectedItems[0].Index].Employeerc;
        dateTimePicker1.Value = employeer[listView1.SelectedItems[0].Index].StartDate;
        dateTimePicker2.Value = employeer[listView1.SelectedItems[0].Index].EndDate;

    }


    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        //try
        //{
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(filename);

            XmlNode xNode = xDoc.SelectSingleNode("Employeer");
            xNode.RemoveAll();

            foreach (Employeer em in employeer)
            {
                XmlNode xTop = xDoc.CreateElement("Employeer");
                XmlNode xName = xDoc.CreateElement("Name");
                XmlNode xStartDate = xDoc.CreateElement("StartDate");
                XmlNode xEndDate = xDoc.CreateElement("EndDate");

                xName.InnerText = em.Employeerc;
                xStartDate.InnerText = em.StartDate.ToFileTime().ToString();
                xEndDate.InnerText = em.EndDate.ToFileTime().ToString();

                xTop.AppendChild(xName);
                xTop.AppendChild(xStartDate);
                xTop.AppendChild(xEndDate);

                xDoc.DocumentElement.AppendChild(xTop);
            }
            xDoc.Save(filename);

        //}
        //catch
        //{

        //}
    }


    private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
        using (OpenFileDialog fileChooser = new OpenFileDialog())
        {
            fileChooser.Filter = "Xml Files (*.xml)|*.xml";
            fileChooser.CheckFileExists = false;
            result = fileChooser.ShowDialog();
            filename = fileChooser.FileName;
        }
        if (result == DialogResult.OK)
        {

            if (filename == string.Empty)
            {
                MessageBox.Show("Invalid File Name", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                try
                {
                    //FileStream output = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);

                    //filewriter = new StreamWriter(output);

                    /////////////////////////////////////////////////////////////////

                    //if (!Directory.Exists(filename + "Employment History"))
                    //    Directory.CreateDirectory(filename + "Empoyment History");

                    //if (!File.Exists(filename))
                    //{
                    //    XmlTextWriter xW = new XmlTextWriter(filename, Encoding.UTF8);

                    //    xW.Formatting = Formatting.Indented;
                    //    xW.WriteStartDocument();
                    //    xW.WriteStartElement("Employeer");
                    //    xW.WriteEndElement();
                    //    xW.Close();

                        XmlDocument xDoc = new XmlDocument();
                        xDoc.Load(filename);

                        foreach (XmlNode xNode in xDoc.SelectNodes("Employeer/Employeer"))
                        {
                            Employeer em = new Employeer();
                            em.Employeerc = xNode.SelectSingleNode("Name").InnerText;
                            em.StartDate = DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode("StartDate").InnerText));
                            em.EndDate = DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode("EndDate").InnerText));

                            employeer.Add(em);
                            listView1.Items.Add(em.Employeerc);

                        }

                        //xW = WriteStartElement("Emplyment"); 

                    //}

                    saveToolStripMenuItem.Enabled = false;
                    saveAsToolStripMenuItem.Enabled = true;

                }
                catch (IOException)
                {
                    MessageBox.Show("Error Openning File", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

        }


    }


    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Close();
        //MessageBox.Show("Save and Exit", "Cancel", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
    }


    private void textBox2_TextChanged(object sender, EventArgs e)
    {


    }


    void Remove()
    {
        try
        {

            //listView1.Items.RemoveAt(listView1.SelectedItems[0].Index);
            //employeer.RemoveRange(listView1.SelectedItems[0].Index, 1);



            if (listView1.SelectedItems.Count >= 1)
            {
                //return;
                listView1.Items.Remove(listView1.SelectedItems[0]);
                employeer.RemoveAt((int)listView1.SelectedItems[0].Index);

                textBox1.Text = "";
                dateTimePicker1.Value = DateTime.Now;
                dateTimePicker2.Value = DateTime.Now;
            }
        }
        catch
        {

        }
    }


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

  }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用System.IO;
使用System.Xml;
利用系统资源;
名称空间SaveOpenXmlTest1.\u 2
{
公共部分类Form1:Form
{
//ListViewItem employeer=新ListViewItem();
//列表雇主=新列表();
List employeer=新列表();
对话结果;
字符串文件名;
字符串路径=Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
//私有StreamWriter文件编写器;
//私有StreamReader文件阅读器;
公共表格1()
{
初始化组件();
}
//List employ=新列表();
//List employeer=新列表();
私有void Form1\u加载(对象发送方、事件参数e)
{
}
私有void saveToolStripMenuItem\u单击(对象发送者,事件参数e)
{
使用(SaveFileDialog filechooser=new SaveFileDialog())
{
filechooser.Filter=“Xml文件(*.Xml)|*.Xml”;
filechooser.CheckFileExists=false;
结果=filechooser.ShowDialog();
filename=filechooser.filename;
}
if(result==DialogResult.OK)
{
如果(文件名==string.Empty)
{
Show(“无效文件名”,“错误”,MessageBoxButtons.OK,MessageBoxIcon.Error);
}
其他的
{
尝试
{
//FileStream output=新FileStream(文件名,FileMode.OpenOrCreate,FileAccess.Write);
//filewriter=新的StreamWriter(输出);
/////////////////////////////////////////////////////////////////
//如果(!Directory.Exists(文件名+“雇用历史”))
//CreateDirectory(文件名+“员工历史”);
如果(!File.Exists(filename))
{
XmlTextWriter xW=新的XmlTextWriter(文件名,Encoding.UTF8);
xW.Formatting=格式化.缩进;
xW.WriteStartDocument();
xW.书面财产(“雇主”);
xW.WriteEndElement();
xW.Close();
XmlDocument xDoc=新的XmlDocument();
加载(文件名);
foreach(xDoc.SelectNodes中的XmlNode xNode(“Employeer/Employeer”))
{
Employeer em=新员工();
em.Employeerc=xNode.SelectSingleNode(“名称”).InnerText;
em.StartDate=DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode(“StartDate”).InnerText));
em.EndDate=DateTime.FromFileTime(Convert.ToInt64(xNode.SelectSingleNode(“EndDate”).InnerText));
雇主添加(em);
列表视图1.Items.Add(em.Employeerc);
}
//xW=书面启动元素(“雇用”);
}
saveToolStripMenuItem.Enabled=false;
saveAstolStripMenuItem.Enabled=true;
}
捕获(IOException)
{
Show(“错误打开文件”,“错误”,MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
}
私有void saveAstolStripMenuItem\u单击(对象发送方,事件参数e)
{
}
阶级雇员
{
公共字符串Employeerc{get;set;}
公共日期时间起始日期{get;set;}
公共日期时间结束日期{get;set;}
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
Employeer em=新员工();
em.Employeerc=textBox1.Text;
em.StartDate=dateTimePicker1.Value;
em.EndDate=dateTimePicker2.Value;
雇主添加(em);
列表视图1.Items.Add(em.Employeerc);
textBox1.Text=“”;
dateTimePicker1.Value=DateTime.Now;
dateTimePicker2.Value=DateTime.Now;
}
私有无效列表视图1\u SelectedIndexChanged(对象发送方,事件参数e)
{
如果(listView1.SelectedItems.Count==0)
返回;
textBox1.Text=employeer[listView1.SelectedItems[0].Index].Employeerc;
dateTimePicker1.Value=employeer[listView1.SelectedItems[0].Index].StartDate;
dateTimePicker2.Value=employeer[listView1.SelectedItems[0].索引].EndDate;
}
私有作废Form1\u FormClosing(对象发送方,FormClosingEventArgs e)
{
//试一试
//{
XmlDocument xDoc=新的XmlDocument();
加载(文件名);
XmlNode xNode=xDoc.SelectSingleNode(“雇员”);
xNode.RemoveAll();
foreach(Employeer em in Employeer)
{
XmlNode xTop=xDoc.CreateElement(“雇员”);
XmlNode xName=xDoc.CreateElement(“名称”);
XmlNode xStartDate=xDoc.CreateElement(“StartDate”);
XmlNode xEndDate=xDoc.CreateElement(“EndDate”);
xName.InnerText=em.Employeerc;
xStartDate.InnerText=em.StartDate.ToFileTime().ToString();
森德
Employers em = new Employers();

employers.RemoveAt(listView1.SelectedItems[0].Index);

foreach (ListViewItem eachItem in listView1.SelectedItems)
{
    listView1.Items.Remove(eachItem);
}