c#将ListView数据存储到数组中并按升序排序

c#将ListView数据存储到数组中并按升序排序,c#,arrays,winforms,sorting,C#,Arrays,Winforms,Sorting,我已经创建了一个windows窗体应用程序,在该应用程序中,我将信息添加到列表视图中,但是我希望在下次打开程序时存储这些信息。如何将列表视图信息存储到数组中,以及如何按升序(截止日期)对其进行排序 } >P> >这里有几点要考虑: 1) 使用数据库。这样数据更安全,更容易访问,可以保存大量记录等。您可以使用无服务器数据库引擎,如SQLite 2) 若您确实希望避免使用数据库,那个么可以使用一些类来存储数据,以便以后可以将其序列化为XML并从XML反序列化。 3) 如果其他所有操作都失败,您可以将

我已经创建了一个windows窗体应用程序,在该应用程序中,我将信息添加到列表视图中,但是我希望在下次打开程序时存储这些信息。如何将列表视图信息存储到数组中,以及如何按升序(截止日期)对其进行排序

}


>P> >这里有几点要考虑: 1) 使用数据库。这样数据更安全,更容易访问,可以保存大量记录等。您可以使用无服务器数据库引擎,如SQLite 2) 若您确实希望避免使用数据库,那个么可以使用一些类来存储数据,以便以后可以将其序列化为XML并从XML反序列化。 3) 如果其他所有操作都失败,您可以将数据存储到本地csv文件中。:)

下面是一个序列化示例,它在表单关闭时将数据写入应用程序文件夹(在data.xml文件中),并在表单加载时从文件中加载数据 (非常基本的一个,但它可以给你一个想法…)

使用System.Xml.Serialization;
(...)
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
listView1.View=View.Details;
listView1.FullRowSelect=true;
LoadDataFromDisk();
listView1.Columns.Add(“到期日”,150);
listView1.Columns.Add(“模块”,150);
listView1.Columns.Add(“Title”,150);
}
私有无效添加(字符串截止日期、字符串模块、字符串标题)
{
字符串[]行={DueDate,Module,Title};
ListViewItem项目=新建ListViewItem(行);
listView1.Items.Add(项目);
}
private void ListView1u鼠标单击(对象发送方,鼠标目标)
{
字符串Duedate=listView1.SelectedItems[0]。子项[0]。文本;
字符串模块=listView1。SelectedItems[0]。子项[1]。文本;
字符串标题=listView1。SelectedItems[0]。子项[2]。文本;
textBox1.Text=Duedate;
textBox2.Text=模块;
textBox3.Text=标题;
}
私有void btnAdd_单击(对象发送者,事件参数e)
{
添加(textBox1.Text、textBox2.Text、textBox3.Text);
textBox1.Text=“”;
textBox2.Text=“”;
textBox3.Text=“”;
}
私有void btnClear\u单击(对象发送者,事件参数e)
{
listView1.Items.Clear();
textBox1.Text=“”;
textBox2.Text=“”;
textBox3.Text=“”;
}
私有void更新()
{
listView1.SelectedItems[0]。子项[0]。Text=textBox1.Text;
listView1.SelectedItems[0]。子项[1]。Text=textBox2.Text;
listView1.SelectedItems[0]。子项[2]。Text=textBox3.Text;
textBox1.Text=“”;
textBox2.Text=“”;
textBox3.Text=“”;
}
私有void b更新\单击(对象发送者,事件参数e)
{
更新();
}
私有void delete()
{
if(MessageBox.Show(“是否确实要删除”,“删除”,MessageBoxButtons.OK取消,MessageBoxIcon.Warning)=DialogResult.OK)
{
listView1.Items.RemoveAt(listView1.SelectedDices[0]);
textBox1.Text=“”;
textBox2.Text=“”;
textBox3.Text=“”;
}
}
私有void btnDelete\u单击(对象发送者,事件参数e)
{
删除();
}
私有作废Form1\u FormClosing(对象发送方,FormClosingEventArgs e)
{
SaveDataToDisk();
}
私有void SaveDataToDisk()
{
List myDataList=新列表();
foreach(此.listView1.Items中的ListViewItem lvi)
{
MyData d=新的MyData();
d、 DueDate=lvi.SubItems[0]。文本;
d、 Module=lvi.SubItems[1]。文本;
d、 Title=lvi.SubItems[2]。文本;
myDataList.Add(d);
}
XmlSerializer serializer=新的XmlSerializer(myDataList.GetType());
字符串dataFile=Path.Combine(Application.StartupPath,“data.xml”);
TextWriter fileStream=新的StreamWriter(数据文件);
serializer.Serialize(fileStream,myDataList);
fileStream.Close();
}
私有void LoadDataFromDisk()
{
字符串dataFile=Path.Combine(Application.StartupPath,“data.xml”);
FileStream FileStream=新FileStream(数据文件,FileMode.Open,FileAccess.Read,FileShare.Read);
列表数据=新列表();
XmlSerializer serializer=新的XmlSerializer(data.GetType());
数据=(列表)序列化程序。反序列化(文件流);
fileStream.Close();
listView1.Items.Clear();
foreach(数据中的var d)
{
添加(d.截止日期、d.模块、d.标题);
}
}
}
公共类MyData
{
公共字符串DueDate{get;set;}
公共字符串标题{get;set;}
公共字符串模块{get;set;}
}

这里有几点要考虑: 1) 使用数据库。这样数据更安全,更容易访问,可以保存大量记录等。您可以使用无服务器数据库引擎,如SQLite 2) 若您确实希望避免使用数据库,那个么可以使用一些类来存储数据,以便以后可以将其序列化为XML并从XML反序列化。 3) 如果其他所有操作都失败,您可以将数据存储到本地csv文件中。:)

下面是一个序列化示例,其中
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

    private void Form1_Load(object sender, EventArgs e)
    {
        listView1.View = View.Details;
        listView1.FullRowSelect = true;

        listView1.Columns.Add("Due Date", 150);
        listView1.Columns.Add("Module", 150);
        listView1.Columns.Add("Title", 150);
    }

    private void add(string DueDate, String Module, String Title)
    {
        string[] row = { DueDate, Module, Title };
        ListViewItem item = new ListViewItem(row);

        listView1.Items.Add(item);
    }

    private void listView1_MouseClick(object sender, MouseEventArgs e)
    {
        String Duedate = listView1.SelectedItems[0].SubItems[0].Text;
        String Module = listView1.SelectedItems[0].SubItems[1].Text;
        String Title = listView1.SelectedItems[0].SubItems[2].Text;

        textBox1.Text = Duedate;
        textBox2.Text = Module;
        textBox3.Text = Title;
    }

    private void btnAdd_Click(object sender, EventArgs e)
    {
        add(textBox1.Text, textBox2.Text, textBox3.Text);

        textBox1.Text = "";
        textBox2.Text = "";
        textBox3.Text = "";
    }

    private void btnClear_Click(object sender, EventArgs e)
    {
        listView1.Items.Clear();

        textBox1.Text = "";
        textBox2.Text = "";
        textBox3.Text = "";
    }

    private void update()
    {
        listView1.SelectedItems[0].SubItems[0].Text = textBox1.Text;
        listView1.SelectedItems[0].SubItems[1].Text = textBox2.Text;
        listView1.SelectedItems[0].SubItems[2].Text = textBox3.Text;

        textBox1.Text = "";
        textBox2.Text = "";
        textBox3.Text = "";
    }

    private void btnUpdate_Click(object sender, EventArgs e)
    {
        update();
    }

    private void delete()
    {
        if(MessageBox.Show("Are you sure you want to Delete", "Delete", MessageBoxButtons.OKCancel,MessageBoxIcon.Warning)== DialogResult.OK)
        {
            listView1.Items.RemoveAt(listView1.SelectedIndices[0]);

            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
        }
    }

    private void btnDelete_Click(object sender, EventArgs e)
    {
        delete();
    }
}
using System.Xml.Serialization;

(...)

 public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                listView1.View = View.Details;
                listView1.FullRowSelect = true;

            LoadDataFromDisk();

                listView1.Columns.Add("Due Date", 150);
                listView1.Columns.Add("Module", 150);
                listView1.Columns.Add("Title", 150);
            }

            private void add(string DueDate, String Module, String Title)
            {
                string[] row = { DueDate, Module, Title };
                ListViewItem item = new ListViewItem(row);

                listView1.Items.Add(item);
            }

            private void listView1_MouseClick(object sender, MouseEventArgs e)
            {
                String Duedate = listView1.SelectedItems[0].SubItems[0].Text;
                String Module = listView1.SelectedItems[0].SubItems[1].Text;
                String Title = listView1.SelectedItems[0].SubItems[2].Text;

                textBox1.Text = Duedate;
                textBox2.Text = Module;
                textBox3.Text = Title;
            }

            private void btnAdd_Click(object sender, EventArgs e)
            {
                add(textBox1.Text, textBox2.Text, textBox3.Text);

                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
            }

            private void btnClear_Click(object sender, EventArgs e)
            {
                listView1.Items.Clear();

                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
            }

            private void update()
            {
                listView1.SelectedItems[0].SubItems[0].Text = textBox1.Text;
                listView1.SelectedItems[0].SubItems[1].Text = textBox2.Text;
                listView1.SelectedItems[0].SubItems[2].Text = textBox3.Text;

                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
            }

            private void btnUpdate_Click(object sender, EventArgs e)
            {
                update();
            }

            private void delete()
            {
                if (MessageBox.Show("Are you sure you want to Delete", "Delete", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
                {
                    listView1.Items.RemoveAt(listView1.SelectedIndices[0]);

                    textBox1.Text = "";
                    textBox2.Text = "";
                    textBox3.Text = "";
                }
            }

            private void btnDelete_Click(object sender, EventArgs e)
            {
                delete();
            }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            SaveDataToDisk();
        }

        private void SaveDataToDisk()
        {
            List<MyData> myDataList = new List<MyData>();

            foreach (ListViewItem lvi in this.listView1.Items)
            {
                MyData d = new MyData();

                d.DueDate = lvi.SubItems[0].Text;
                d.Module = lvi.SubItems[1].Text;
                d.Title = lvi.SubItems[2].Text;

                myDataList.Add(d);
            }

            XmlSerializer serializer = new XmlSerializer(myDataList.GetType());
            string dataFile = Path.Combine(Application.StartupPath, "data.xml");
            TextWriter fileStream = new StreamWriter(dataFile);
            serializer.Serialize(fileStream, myDataList);
            fileStream.Close();
        }

        private void LoadDataFromDisk()
        {
            string dataFile = Path.Combine(Application.StartupPath, "data.xml");
            FileStream fileStream = new FileStream(dataFile, FileMode.Open, FileAccess.Read, FileShare.Read);

            List<MyData> data = new List<MyData>();
            XmlSerializer serializer = new XmlSerializer(data.GetType());

            data = (List<MyData>)serializer.Deserialize(fileStream);

            fileStream.Close();

            listView1.Items.Clear();
            foreach (var d in data)
            {
                add(d.DueDate, d.Module, d.Title);
            }
        }
    }

    public class MyData
    {
        public string  DueDate { get; set; }
        public string Title { get; set; }
        public string Module { get; set; }
    }
class ListViewItemComparer : IComparer
{
    private int col;
    public ListViewItemComparer()
    {
        col = 0;
    }
    public ListViewItemComparer(int column)
    {
        col = column;
    }
    public int Compare(object x, object y)
    {
        int returnVal = -1;
        returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text,
        ((ListViewItem)y).SubItems[col].Text);
        return returnVal;
    }
}
    private void btnSort_Click(object sender, EventArgs e)
    {
        listView1.ListViewItemSorter = new ListViewItemComparer(2); // Column number 3
        listView1.Sorting = SortOrder.Ascending;
        listView1.Sort();            
    }
public class ExampleObject
{
    public string DueDate { get; set; }
    public string Module { get; set; }
    public string Title { get; set; }
}
    private void btnList_Click(object sender, EventArgs e)
    {
        List<ExampleObject> templist = new List<ExampleObject>();

        var collection = listView1.Items;
        foreach (var item in collection)
        {
            ListViewItem obj = (ListViewItem)item;
            var subitems = obj.SubItems;
            List<string> stringlist = new List<string>();

            foreach (ListViewSubItem subitem in subitems)
            {
                stringlist.Add(subitem.Text);
            }

            ExampleObject tempobject = new ExampleObject()
            {
                DueDate = stringlist[0],
                Module = stringlist[1],
                Title = stringlist[2]

            };
            templist.Add(tempobject);

        }
    }
[Serializable()]
public class State
    {
        public List<ListViewDataItem> ListViewChoises;
    }
 if (File.Exists(FileName))
{
    Stream TestFileStream = File.OpenRead(FileName);
    BinaryFormatter deserializer = new BinaryFormatter();
    var loaded_state = (State)deserializer.Deserialize(TestFileStream);
    TestFileStream.Close();
}
  protected override void OnFormClosing(FormClosingEventArgs e)
    {
    State state = new State(){Listbox1Choise = (ListboxChoises)System.Enum.Parse(typeof(ListboxChoises),  listView1.SelectedItems[0].SubItems[0].Text);

    Stream TestFileStream = File.Create(FileName);
    BinaryFormatter serializer = new BinaryFormatter();
    serializer.Serialize(TestFileStream, state);
    TestFileStream.Close();    

    base.OnFormClosing(e);               
    }