0

如何将数据保存在列表视图中?

例如,如果用户在列表视图中放入了一些东西,然后关闭了应用程序,那么所有这些信息都会丢失。有什么方法可以在他们将某些内容放入 listView 后立即保存信息?

这是我用来将信息从文本框输入到 listView1 的代码:

  string[] items = { titletxt.Text, statustxt.Text };
        ListViewItem lvi = new ListViewItem(items);
        listView1.Items.Add(lvi);

更新(2012 年 12 月 29 日)

感谢所有的帮助!但我似乎无法让它工作。我创建了一个非常简单的表单来尝试让它工作。它有 3 个文本框(NameTxt、AgeTxt、HairColourTxt)、一个按钮和列表视图(ListOfPeople)。

这是代码:

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 listview
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string[] items = { NameTxt.Text, AgeTxt.Text, HairColourTxt.Text };
            ListViewItem lvi = new ListViewItem(items);
            ListOfPeople.Items.Add(lvi);
        }
    }
}

我试图添加@user574632 & @Joe & @DmitryKvochkin 发布的代码,我已经更改了位,但仍然无法让它工作。我不确定我做错了什么?我试图添加这个:

     private void saveListOfPeopleItems(string path, ListView lv)
    {
        var delimeteredListviewData = new List<string>();

        foreach (ListViewItem lvi in lv.Items)
        {
            string delimeteredItems = string.Empty;
            foreach (ListViewItem.ListViewSubItem lvsi in lvi.SubItems)
            {
                delimeteredItems += lvsi.Text + "#";
            }
            delimeteredListviewData.Add(delimeteredItems);
        }

        System.IO.File.WriteAllLines(path, delimeteredListviewData.ToArray());
    }

    private void loadListOfPeopleItems(string path, ListView lv)
    {

        foreach (string line in System.IO.File.ReadAllLines(path))
        {
            lv.Items.Add(new ListViewItem(line.Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries)));
        }
    }
4

4 回答 4

1

您需要创建保存逻辑,没有自动方法。

最简单的方法是使用Serialization(查找ISerializable)保存到您选择的文件中(随意命名):您可以通过这种方式保存整个对象。这是一个关于序列化的简单教程。

另一种方法是将列表视图内容解析为字符串(仅保留您需要的内容),然后将字符串保存到文本文件(TextReaderTextWriter)。

如果您想保存应用程序设置(而不是用户数据),请查看此链接,或者链接可能更易于阅读。

最后,如果您需要与定期保存的数据进行交互,或者如果您有大量数据要存储,请使用数据库(SQL、mySQL 等)。后一种方法是实现时间最长的方法。

于 2012-12-28T21:40:19.747 回答
1

如果要保存到文本文件,可以使用以下内容:

 private void saveListViewItems(string path, ListView lv)
    {
        var delimeteredListviewData = new List<string>();

        foreach (ListViewItem lvi in lv.Items)
        {
            string delimeteredItems = string.Empty;
            foreach (ListViewItem.ListViewSubItem lvsi in lvi.SubItems)
            {
                delimeteredItems += lvsi.Text + "#";
            }
            delimeteredListviewData.Add(delimeteredItems);
        }

        System.IO.File.WriteAllLines(path, delimeteredListviewData.ToArray());
    }

    private void loadListViewItems(string path, ListView lv)
    {

        foreach (string line in System.IO.File.ReadAllLines(path))
        {
            lv.Items.Add(new ListViewItem(line.Split(new char[]{'#'}, StringSplitOptions.RemoveEmptyEntries)));
        }
    }
于 2012-12-28T22:55:55.963 回答
0

您可以使用集成的 Visual Studio 设置并将其绑定到您的列表视图,即使在设计器中也是如此。更改列表视图后,您可以保存它们

于 2012-12-28T21:59:41.500 回答
-1

我会说答案是:使用 .txt 文件您也可以创建一个 SQL 数据库,并将其保存在那里...

于 2012-12-28T21:33:16.947 回答