【问题标题】:How to save a listview of data to a .txt in C# so it can be accessed the next time the form is open?如何在 C# 中将数据列表视图保存到 .txt,以便下次打开表单时可以访问它?
【发布时间】:2016-01-01 21:17:12
【问题描述】:

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

例如,如果用户在列表视图中放入了一些东西,然后关闭了应用程序,那么所有这些信息都会丢失。有什么方法可以在他们将内容放入 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)));
        }
    }

【问题讨论】:

  • 看看这个如果这个链接不适合你做一个关于如何序列化列表视图数据的谷歌搜索,stackoverflow.com/questions/2292480/…
  • 您必须将信息放在数据库或常规文件(例如 .txt 或 .dat 文件)之类的地方。由于您使用的列表视图可能包含带有子项目的项目,因此 xml 序列化可能是其他 cmets 中建议的最佳方式。
  • 如何调用加载和保存例程?例如应该是 loadListOfPeopleItems("c:\path\to\file.txt", ListOfPeople);
  • 感谢您的回复!我没有这样做,我只是写了上面的代码并更改了“loadListOfPeopleItems(string ...”。我应该如何调用加载和保存例程?在visual studio的属性中有没有办法做到这一点?

标签: c# string listview save


【解决方案1】:

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

最简单的方法是使用Serialization(查找ISerializable)保存到您选择的文件(随便命名):您可以通过这种方式保存整个对象。 Here is a simple tutorial on serialization.

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

如果您想保存应用程序设置(而不是用户数据),请查看this linkthis one,它们可能更易于阅读。

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

【讨论】:

  • 感谢您的回复,我还在学习这一切 :D 如何进行序列化?
  • 我添加了一个序列化教程的链接。如果您有自定义对象,则必须在每个对象上实现 ISerializable。看到您的原始代码,您似乎只有 2 个字符串要保存? TextWriter 对您来说可能是一种更简单的方法。或者使用 Visual Studio 的集成设置(我稍后会添加一个链接)。
  • 我添加了 2 个链接。考虑接受最适合您的方案/最能帮助您的答案,以帮助我们! :)
  • 感谢您的帮助!我认为最好的方法是将信息保存到文本文件中。有很多信息要存储。
【解决方案2】:

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

 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)));
        }
    }

【讨论】:

  • 谢谢!但它不适用于我的代码。我认为我做错了什么。因为我仍在学习所有这些,请您解释一下我需要更改以适应我的代码的内容。感谢您的帮助! :D
【解决方案3】:

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

【讨论】:

  • 感谢您的回复。我怎么能这样做?
【解决方案4】:

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

【讨论】:

  • 感谢您的回复 :D 如何将信息存储到 .txt 文件中,然后在重新打开应用程序后检索它?
  • 好吧,每次运行应用程序时,首先要做的就是从 .txt 文件读取到“列表视图”。每次关闭应用程序时,您应该运行一个函数,用新的“列表视图”覆盖(删除现有的,创建具有相同名称的新文件).txt 文件。你可以在这里查看代码:msdn.microsoft.com/en-us/library/db5x7c0d.aspx
猜你喜欢
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多