如何在 "ListView" 中保存详细信息并将其加载到(属性设置)

how to save details in "ListView" and load it in (properties settings)

我在 ListVeiw 上遇到问题我找不到任何关于在属性设置中保存 listveiw 的视频,我有很多方法可以保存细节但间接方法和弱方法

注意:我不想使用 (split = "|") 因为如果我把一些细节有 |它打破了一切 alltext = SR.ReadToEnd().Split('|');

我使用 visual studio windows 形式 C#

这里是代码

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

        string[] alltext;
        string text;

        private void Form1_Load(object sender, EventArgs e)
        {
            StreamReader SR = new StreamReader("Text.txt");
            alltext = SR.ReadToEnd().Split('|');
            foreach (string s in alltext)
            {
                if (!string.IsNullOrWhiteSpace(s))
                {
                    listView1.Items.Add(s);
                }
            }
            SR.Close();

        }

        private void Set_Click(object sender, EventArgs e)
        {
            listView1.Items.Add(textBox1.Text);


            // here save old details
            StreamReader SR = new StreamReader("Text.txt");
            text = SR.ReadToEnd();
            SR.Close();

            // Real Save details
            StreamWriter SW = new StreamWriter("Text.txt");
            SW.Write(text + textBox1.Text + "|");
            SW.Close();

            textBox1.Clear();
        }

        private void Remove_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("do you want to remove list" , "Test" , MessageBoxButtons.OKCancel , MessageBoxIcon.Question) == DialogResult.OK)
            {
                File.WriteAllText("Text.txt", "");
                listView1.Items.Clear();
            }
        }

    }
}

您可以创建自定义 class 来保存项目数据,如下所示:

    public class ItemData
    {
        public int Index { get; set; }

        public string Text { get; set; } = string.Empty;
    }

如果需要,您可以在 class 中添加其他信息。在您的表单中创建一个 ItemData 列表作为字段:

private List<ItemData> itemsData = new();

然后每次将项目添加到列表时,将其添加到集合中,如下所示:

var item = listView1.Items.Add(textBox1.Text);
this.itemsData.Add(new ItemData { Index = item.Index, Text = item.Text });

当您需要保存所有项目时,您可以将集合转换为 JSON 字符串,如下所示:

string jsonString = JsonSerializer.Serialize(this.itemsData);

然后把结果保存在你需要的地方。当您需要填充项目时,您可以获取字符串并将其转换回集合并像这样填充 ListView:

List<ItemData> itemsData = JsonSerializer.Deserialize<List<ItemData>>(jsonString);
itemsData.ForEach(item => this.listView1.Items.Add(item.Text));