【问题标题】:how to save details in "ListView" and load it in (properties settings)如何在“ListView”中保存详细信息并将其加载(属性设置)
【发布时间】:2021-12-27 18:04:30
【问题描述】:

我在 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();
            }
        }

    }
}

【问题讨论】:

  • 这些计时器是怎么回事?不知道为什么你有它们。如何保存列表项取决于您。没有标准的方法。这一切都取决于您的需求。可以像使用换行符来分隔每个数据项一样简单。您无需阅读整个文件即可保存新项目。你可以只 Append 一个项目。
  • timer1 因为我可以看到 x++ 。 timer2 检查 x == list count 是否,如果是则停止 timer2
  • 如果您不想使用管道,可以使用垂直制表符。最后,所有项目归结为object,因此您需要一些自定义转换代码。 - 计时器的使用似乎既脆弱又奇怪..

标签: c# winforms


【解决方案1】:

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

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

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

如果需要,您可以在课程中添加其他信息。在您的表单中创建一个 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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2015-06-27
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2020-02-26
    相关资源
    最近更新 更多