【发布时间】: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的属性中有没有办法做到这一点?